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

So entfernen Sie die rechte Auffüllung des Tagesnamens in Oracle

In der Oracle-Datenbank bei Verwendung von TO_CHAR() Funktion, um den Tagesnamen eines Datums zurückzugeben, wird eine Auffüllung an den Tagesnamen angehängt, wenn er kürzer als der längste gültige Tagesname für die angegebene Sprache und den Kalender ist.

Nun, das ist das Standardverhalten. Sie können dies jedoch ändern, wenn Sie möchten.

Um dieses Auffüllen zu unterdrücken, müssen Sie lediglich dem Formatelement des Tagesnamens fm voranstellen .

Beispiel

Angenommen, wir führen den folgenden Code aus:

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

Ergebnis:

Friday   , 08 March     2030

Wir können sehen, dass nachgestellte Leerzeichen an den Tagesnamen und den Monatsnamen angehängt wurden.

Wir können den fm verwenden Formatmodifikator, um dieses Leerzeichen zu unterdrücken:

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

Ergebnis:

Friday, 8 March 2030

Problem gelöst.

Beachten Sie, dass dies auch den Nebeneffekt hatte, dass die nachgestellten Leerzeichen aus dem Monatsnamen unterdrückt wurden.

Außerdem wurde die führende Null aus der Tagesnummer unterdrückt.

Wir können mehrere fm verwenden Modifikatoren, um genauer zu sagen, welche Auffüllung wir unterdrücken möchten. Jeder fm schaltet in unserem Formatmodell den Füllmodus ein und aus.

Angenommen, wir möchten die nachgestellten Leerzeichen aus den Tages- und Monatsnamen unterdrücken, aber wir möchten die führende Null in der Tagesnummer beibehalten. In diesem Fall können wir Folgendes tun:

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

Ergebnis:

Friday   , 08 March     2030

Der Grund, warum wir ein drittes fm verwendet haben (vor MONTH ) liegt an der zweiten fm Wieder aktivierte Auffüllung für alle nachfolgenden Formatelemente, was dazu führen würde, dass die nachgestellten Leerzeichen für den Monat beibehalten würden.

Folgendes meine ich:

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

Ergebnis:

Friday   , 08 March     2030

In diesem Fall wurde das Auffüllen des Tagesnamens unterdrückt und dann für die Tagesnummer, den Monat und das Jahr wieder aktiviert.

Glücklicherweise können wir so viele fm hinzufügen Modifikatoren, da wir das gewünschte Ergebnis erzielen müssen.