SQL – Formatting Dates and Numbers – Tricks & Tipps

Formatting Dates / Datumswerte formatieren in SQL

Bei Datumswerten wie „MONTH“ oder „DD“ oder „DAY“ werden durch Oracle Leerzeichen hinzugefügt. Dies hat den Vorteil, dass die nachfolgenden Werte im gleichen Abschnitt beginnen. So viele Vorteile diese Funktion für die Lesbarkeit bietet, so schlecht ist sie etwa für Auswahllisten oder Gruppierungen. Dies Bedeutet, dass die Funktion nicht immer gewünscht ist. Wie sich die normale Funktion „MONTH“ verhaltet, könnt ihr im unteren Bespiel erkennen. Kurze Monatsnamen haben dabei mehr Leerzeichen, während lange Monatsnamen lediglich ein Leerzeichen besitzen.

-- Example where the month names includes spaces
SELECT TO_CHAR(SYSDATE, 'MONTH YYYY')
FROM DUAL;
-- Result: "May      2020"
-- Result: "June     2020"
-- Result: "November 2020"
-- Result: "December 2020"
 

Möchtest du nun alle Monatsnamen mit nur einem Leerzeichen haben (Leerzeichen aus Monatsnamen und Tagesnamen in SQL entfernen), so kannst du den Parameter „fm“ nutzen. Mit dem Parameter „fm“ (format modifier) werden automatisch die Leerzeichen vorne, mittig und hinten entfernt, sodass der Monatsname nur ein Leerzeichen zwischen der Jahreszahl hat. Dadurch ergibt sich für Auswahllisten oder aber auch für viele Anwendungen ein lesbares Bild.

-- Example where the month names includes just one space
SELECT TO_CHAR(SYSDATE, 'fmMONTH YYYY')
FROM DUAL;
-- Result: "May 2020"
-- Result: "June 2020"
-- Result: "November 2020"
-- Result: "December 2020"
 

Formatting Numbers / Zahlen und Zahlenwerte formatieren in SQL

Der Parameter „fm“ (format modifier) funktioniert nicht nur bei Datumswerten, sondern kann auch bei Zahlen verwendet werden und entfernt überschüssige Leerzeichen. Dabei solltest du allerdings zwischen positiven und negativen Zahlen unterschieden.

-- Example with numbers in combination with format modifier (fm)
SELECT 
    TO_CHAR(1, '000'),
    TO_CHAR(1, 'fm000'),
    TO_CHAR(-1, '000'), 
    TO_CHAR(-1, 'fm000')
FROM DUAL;
-- Result: " 001"
-- Result: "001"
-- Result: "-001"
-- Result: "-001"
 

Ist dir die Formatierung vorne wichtig, kannst du den negativen Parameter (das Minussymbol) auch hinter die Zahl setzten. Dazu verwendest du ganz einfach den Parameter „mi“ (minus). Dadurch wird das Vorzeichen von negativen Nummern hinter die Zahl gedruckt, wobei du auch hier wieder auf den Unterschied von positiven und negativen Zahlen achten musst. Auch die Kombination mit „fm“ ist hierbei möglich und oftmals nützlich. Das Minus im hinteren Teil der Zahl wird oftmals auf Abrechnungen verwendet, damit die Stellen vorne immer sichtbar bleiben.

-- Example with numbers in combination with the minus parameter (mi) and the format modifier (fm)
SELECT 
    TO_CHAR(1, '000mi'),
    TO_CHAR(1, 'fm000mi'),
    TO_CHAR(-1, '000mi'), 
    TO_CHAR(-1, 'fm000mi')
FROM DUAL;
-- Result: "001 "
-- Result: "001"
-- Result: "001-"
-- Result: "001-"