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