sql >> Database teknologi >  >> RDS >> Oracle

Sådan fjerner du førende nuller fra datoer i Oracle

I Oracle Database kan du bruge fm (udfyldningstilstand) formatmodifikator for at undertrykke eventuelle foranstillede nuller, der kan anvendes på en dato. Denne formatmodifikator undertrykker polstring, som inkluderer foranstillede nuller og afsluttende blanktegn.

For at bruge fm formatmodifikator, skal du inkludere det i din formatmodel, når du angiver, hvordan datoer skal formateres. For eksempel når du bruger TO_CHAR() funktion til at formatere datoer eller i NLS-parametre såsom NLS_DATE_FORMAT parameter, når du indstiller datoformatet for din aktuelle session.

Eksempel

Her er et eksempel til demonstration:

SELECT 
    TO_CHAR(DATE '2009-08-01', 'DD-MM-YY') AS "Without fm",
    TO_CHAR(DATE '2009-08-01', 'fmDD-MM-YY') AS "With fm"
FROM DUAL;

Resultat:

   Without fm    With fm 
_____________ __________ 
01-08-09      1-8-9     

Vi kan se, at det oprindelige resultat (uden fm modifier) ​​returnerer foranstillede nuller for alle datodele. I dette tilfælde er fm modifier undertrykte det indledende nul på alle tre datodele.

fm modifikator påvirker kun resultatet, hvis der faktisk er indledende nuller i resultatet.

Her er en dato, der inkluderer datodele, der fylder to cifre og derfor ikke har foranstillede nuller:

SELECT 
    TO_CHAR(DATE '2029-12-01', 'DD-MM-YY') AS "Without fm",
    TO_CHAR(DATE '2029-12-01', 'fmDD-MM-YY') AS "With fm"
FROM DUAL;

Resultat:

   Without fm    With fm 
_____________ __________ 
01-12-29      1-12-29    

Sådan angives kun udfyldningstilstand på nogle datodele

Ovenstående eksempel undertrykte det indledende nul på alle datodele. Det foranstillede nul blev fjernet fra dagen, måneden og året. Dette er fordi, når vi placerer en enkelt fm i starten af ​​formatmodellen undertrykker den alle efterfølgende indledende nuller i resultatet.

Antag, at vi kun ønsker at fjerne det foranstillede nul fra dagen og måneden, men beholde det på året. I dette tilfælde kan vi gøre følgende:

SELECT TO_CHAR(DATE '2009-08-01', 'fmDD-MM-fmYY')
FROM DUAL;

Resultat:

1-8-09

fm modifikator fungerer grundlæggende som en switch. Når du inkluderer en, undertrykker den nuller indtil slutningen, eller indtil den støder på en anden fm modifikator. Hvis der er en anden fm modifikator, så undertrykkes indledende nuller ikke ud over det punkt, og så videre.

Her er, hvad der sker, når vi inkluderer tre fm modifikatorer – en før hver datodel:

SELECT TO_CHAR(DATE '2009-08-01', 'fmDD-fmMM-fmYY')
FROM DUAL;

Resultat:

1-08-9

Så i dette tilfælde er fm modifier var grundlæggende aktiveret, derefter deaktiveret og derefter aktiveret igen.

NLS-parametre

Du kan også angive udfyldningstilstand i dine NLS-parametre, såsom NLS_DATE_FORMAT parameter ved indstilling af datoformatet for din aktuelle session.

Eksempel:

ALTER SESSION SET NLS_DATE_FORMAT = 'fmDD-MM-fmRR';

SELECT DATE '2009-08-07' FROM DUAL;

Resultat:

7-8-09

  1. Forebyggende udløser

  2. Tjek statistikmål i PostgreSQL

  3. Julen kommer tidligt (Oracle 12.2)

  4. Dataanalyse vs. datavidenskab:Hvad er forskellen?