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

Come rimuovere gli zeri iniziali dalle date in Oracle

In Oracle Database, puoi utilizzare fm (modalità riempimento) modificatore di formato per eliminare eventuali zeri iniziali che potrebbero essere applicati a una data. Questo modificatore di formato sopprime il riempimento, che include zeri iniziali e spazi finali.

Per utilizzare il fm modificatore di formato, includilo nel tuo modello di formato quando specifichi come formattare le date. Ad esempio quando si utilizza TO_CHAR() per formattare le date o in parametri NLS come NLS_DATE_FORMAT parametro quando si imposta il formato della data per la sessione corrente.

Esempio

Ecco un esempio da dimostrare:

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;

Risultato:

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

Possiamo vedere che il risultato originale (senza fm modificatore) restituisce zeri iniziali per tutte le parti della data. In questo caso, il fm modificatore ha soppresso lo zero iniziale su tutte e tre le parti della data.

Il fm modificatore influisce sul risultato solo se ci sono effettivamente zeri iniziali nel risultato.

Ecco una data che include parti della data che occupano due cifre e quindi non hanno zeri iniziali:

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;

Risultato:

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

Come specificare la modalità di riempimento solo su alcune parti della data

L'esempio precedente ha soppresso lo zero iniziale su tutte le parti della data. Lo zero iniziale è stato rimosso dal giorno, dal mese e dall'anno. Questo perché, quando posizioniamo un singolo fm all'inizio del modello di formato, sopprime tutto zeri iniziali successivi nel risultato.

Supponiamo di voler rimuovere solo lo zero iniziale dal giorno e dal mese, ma mantenerlo sull'anno. In questo caso, possiamo fare quanto segue:

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

Risultato:

1-8-09

Il fm modificatore funziona fondamentalmente come un interruttore. Quando ne includi uno, sopprime gli zeri fino alla fine o finché non incontra un altro fm modificatore. Se c'è un secondo fm modificatore, quindi gli zeri iniziali non vengono soppressi oltre quel punto e così via.

Ecco cosa succede quando includiamo tre fm modificatori – uno prima di ogni parte della data:

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

Risultato:

1-08-9

Quindi in questo caso, il fm modificatore è stato sostanzialmente abilitato, quindi disabilitato, quindi abilitato di nuovo.

Parametri NLS

Puoi anche specificare la modalità di riempimento nei parametri NLS, come NLS_DATE_FORMAT parametro durante l'impostazione del formato della data per la sessione corrente.

Esempio:

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

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

Risultato:

7-8-09