Se hai mai usato TO_CHAR()
funzione per formattare una data che utilizza il nome del mese, potresti aver notato che a volte il mese viene restituito con il riempimento corretto.
Ciò accade per impostazione predefinita quando il nome del mese è più breve del nome del mese più lungo, in base alla lingua e al calendario in uso.
Ad esempio, se la tua lingua è l'inglese e il calendario è gregoriano, il nome del mese più lungo è settembre, che è composto da nove caratteri. Se restituisci il mese da una data, ad esempio marzo (lungo cinque caratteri), per impostazione predefinita, marzo avrà quattro spazi finali (5 + 4 =9).
Fortunatamente, è facile rimuovere questa imbottitura destra, se necessario. Per rimuovere la giusta imbottitura, usa il fm
modificatore di formato.
Il problema
Innanzitutto, ecco il problema che stiamo cercando di risolvere:
SELECT
TO_CHAR(date '2030-03-08', 'DD-MONTH-YYYY')
FROM DUAL;
Risultato:
08-MARCH -2030
Possiamo vedere che c'è un grande divario tra il nome del mese e l'anno. Se non vogliamo questo divario, possiamo usare il fm
modificatore, come mostrato di seguito.
La soluzione
Ora ecco la soluzione:
SELECT
TO_CHAR(date '2030-03-08', 'fmDD-MONTH-YYYY')
FROM DUAL;
Risultato:
8-MARCH-2030
Ora non c'è più spazio tra il mese e l'anno.
Tutto quello che ho fatto è stato anteporre il modello di formato con fm
.
Il fm
il modificatore di formato sta per "Modalità riempimento". Per impostazione predefinita, Oracle utilizza caratteri vuoti finali e zeri iniziali per riempire gli elementi di formato con una larghezza costante. La larghezza è uguale alla larghezza di visualizzazione dell'elemento più grande per il modello di formato pertinente. Usando il fm
modificatore sopprime tutto questo riempimento.
Potresti aver notato che il fm
modificatore ha anche soppresso lo zero iniziale sul numero del giorno. Se non lo vogliamo, possiamo inserire il fm
modificatore davanti al MONTH
invece l'elemento format.
In questo modo:
SELECT
TO_CHAR(date '2030-03-08', 'DD-fmMONTH-YYYY')
FROM DUAL;
Risultato:
08-MARCH -2030
Questa volta, il fm
non è stato applicato al giorno, ma lo era applicato al mese e all'anno.
Se non vogliamo eliminare gli zeri iniziali dell'anno, dobbiamo aggiungere un altro fm
prima dell'anno.
Ecco un esempio che illustra cosa intendo:
SELECT
TO_CHAR(date '0030-03-08', 'DD-fmMONTH-YYYY') AS "r1",
TO_CHAR(date '0030-03-08', 'DD-fmMONTH-fmYYYY') AS "r2"
FROM DUAL;
Risultato:
r1 r2 ______________ ________________ 08-MARCH-30 08-MARCH-0030
La prima colonna utilizza un solo fm
(davanti a MONTH
).
La seconda colonna utilizza due fm
modificatori (uno davanti a MONTH
e uno davanti a YYYY
).