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

Come rimuovere gli spazi finali dopo il nome del mese in Oracle

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 ).