Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So entfernen Sie die nachgestellten Leerzeichen nach dem Monatsnamen in Oracle

Wenn Sie jemals TO_CHAR() verwendet haben Funktion zum Formatieren eines Datums, das den Monatsnamen verwendet, ist Ihnen vielleicht aufgefallen, dass der Monat manchmal mit rechts aufgefülltem Rand zurückgegeben wird.

Dies geschieht standardmäßig, wenn der Monatsname kürzer als der längste Monatsname ist, basierend auf der verwendeten Sprache und dem verwendeten Kalender.

Wenn Ihre Sprache beispielsweise Englisch und der gregorianische Kalender ist, ist der längste Monatsname September, der neun Zeichen lang ist. Wenn Sie den Monat von einem Datum zurückgeben und sagen wir, März (fünf Zeichen lang), dann hat März standardmäßig vier nachgestellte Leerzeichen (5 + 4 =9).

Glücklicherweise ist es einfach, diese rechte Polsterung bei Bedarf zu entfernen. Um die rechte Polsterung zu entfernen, verwenden Sie den fm Formatmodifikator.

Das Problem

Zuerst ist hier das Problem, das wir zu lösen versuchen:

SELECT 
    TO_CHAR(date '2030-03-08', 'DD-MONTH-YYYY')
FROM DUAL;

Ergebnis:

08-MARCH    -2030

Wir können sehen, dass zwischen dem Monatsnamen und dem Jahr eine große Lücke besteht. Wenn wir diese Lücke nicht wollen, können wir den fm verwenden Modifikator, wie unten gezeigt.

Die Lösung

Hier ist die Lösung:

SELECT 
    TO_CHAR(date '2030-03-08', 'fmDD-MONTH-YYYY')
FROM DUAL;

Ergebnis:

8-MARCH-2030

Jetzt gibt es keine Lücke zwischen dem Monat und dem Jahr.

Alles, was ich getan habe, war, dem Formatmodell fm voranzustellen .

Der fm Formatmodifikator steht für „Fill Mode“. Standardmäßig verwendet Oracle abschließende Leerzeichen und führende Nullen, um Formatelemente auf eine konstante Breite zu füllen. Die Breite entspricht der Darstellungsbreite des größten Elements für das jeweilige Formatmodell. Mit dem fm Der Modifikator unterdrückt alle diese Auffüllungen.

Sie haben vielleicht bemerkt, dass der fm Modifikator hat auch die führende Null in der Tageszahl unterdrückt. Wenn wir das nicht wollen, können wir den fm platzieren Modifikator vor dem MONTH stattdessen format-Element.

So:

SELECT 
    TO_CHAR(date '2030-03-08', 'DD-fmMONTH-YYYY')
FROM DUAL;

Ergebnis:

08-MARCH-2030

Diesmal der fm wurde nicht auf den Tag angewendet, aber es war angewendet auf den Monat und das Jahr.

Wenn wir führende Nullen aus der Jahreszahl nicht unterdrücken wollen, müssen wir ein weiteres fm hinzufügen vor dem Jahr.

Hier ist ein Beispiel, das veranschaulicht, was ich meine:

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;

Ergebnis:

            r1               r2 
______________ ________________ 
08-MARCH-30    08-MARCH-0030   

Die erste Spalte verwendet nur einen fm (vor MONTH ).

Die zweite Spalte verwendet zwei fm Modifikatoren (einer vor MONTH , und eine vor YYYY ).