Datumswerte und Zahlen werden in Oracle intern nicht in jener Schreibweise gespeichert, die später in Berichten, Exportdateien oder Benutzeroberflächen angezeigt wird. Ein DATE bleibt ein Datumswert und ein NUMBER bleibt eine Zahl. Erst bei der Ausgabe werden diese Werte mit TO_CHAR in formatierten Text umgewandelt.
Dabei entstehen häufig unerwartete Leerzeichen, fehlende führende Nullen, falsche Dezimaltrennzeichen oder englische Monatsnamen. Besonders wichtig sind deshalb die Formatmodifikatoren FM, MI und FX sowie die NLS-Parameter für Sprache und Zahlenformat.
Dieser Beitrag zeigt anhand ausführbarer Oracle-SQL-Beispiele, wie Datumswerte, Zeitstempel und Zahlen kontrolliert formatiert werden.
Wichtig: Die Beispiele gelten für Oracle SQL
Die Funktionen und Formatmodelle in diesem Beitrag gehören zu Oracle Database. Andere Datenbanksysteme verwenden teilweise andere Funktionen:
| Datenbanksystem | Typische Formatierungsfunktion |
|---|---|
| Oracle Database | TO_CHAR |
| PostgreSQL | TO_CHAR |
| Microsoft SQL Server | FORMAT oder CONVERT |
| MySQL | DATE_FORMAT und FORMAT |
| SQLite | strftime und printf |
Obwohl PostgreSQL ebenfalls TO_CHAR unterstützt, sind nicht alle Oracle-Formatmodelle und NLS-Einstellungen übertragbar.
Was macht TO_CHAR in Oracle?
TO_CHAR wandelt einen Datums-, Zeitstempel- oder Zahlenwert in einen Textwert vom Typ VARCHAR2 um.
Grundsyntax für Datumswerte:
TO_CHAR(datumswert, 'formatmodell')
Grundsyntax für Zahlen:
TO_CHAR(zahl, 'formatmodell')
Optional kann ein dritter Parameter verwendet werden, um Sprache, Dezimalzeichen, Gruppierungszeichen oder Währung unabhängig von den Session-Einstellungen festzulegen.
TO_CHAR(wert, 'formatmodell', 'nls_parameter')
Das Formatmodell verändert nicht den gespeicherten Datenbankwert. Es steuert ausschließlich, wie Oracle den Wert als Text zurückgibt.
Die wichtigsten Datumsformate im Überblick
| Format | Bedeutung | Beispiel |
DD | Tag des Monats | 01 |
MM | Monat als Zahl | 05 |
MON | Abgekürzter Monatsname | MAI |
MONTH | Vollständiger Monatsname | MAI |
YYYY | Vierstellige Jahreszahl | 2026 |
YY | Zweistellige Jahreszahl | 26 |
DY | Abgekürzter Wochentag | FR |
DAY | Vollständiger Wochentag | FREITAG |
HH24 | Stunde von 00 bis 23 | 14 |
MI | Minute | 05 |
SS | Sekunde | 09 |
FF3 | Millisekunden | 123 |
TZH:TZM | Zeitzonenverschiebung | +02:00 |
Oracle empfiehlt grundsätzlich die vierstellige Jahresangabe YYYY, weil kürzere Jahresangaben mehrdeutig sein können.
Datumswerte mit TO_CHAR formatieren
Für reproduzierbare Beispiele sollte statt SYSDATE möglichst ein festes Datum verwendet werden.
SELECT TO_CHAR(
DATE '2026-07-30',
'DD.MM.YYYY'
) AS formatiertes_datum
FROM dual;
Ergebnis:
30.07.2026
Ein Datumswert mit Uhrzeit kann so ausgegeben werden:
SELECT TO_CHAR(
TO_DATE(
'30.07.2026 14:05:09',
'DD.MM.YYYY HH24:MI:SS'
),
'DD.MM.YYYY HH24:MI:SS'
) AS datum_und_uhrzeit
FROM dual;
Ergebnis:
30.07.2026 14:05:09
Bei Oracle enthält der Datentyp DATE neben Jahr, Monat und Tag auch Stunde, Minute und Sekunde. Bruchteile einer Sekunde oder eine Zeitzone werden dagegen erst durch entsprechende TIMESTAMP-Datentypen unterstützt.
Warum Oracle Monatsnamen mit Leerzeichen auffüllt
Die Formate MONTH, MON, DAY und DY werden standardmäßig auf eine einheitliche Länge aufgefüllt. Dadurch beginnen nachfolgende Spaltenbestandteile immer an derselben Position.
SELECT TO_CHAR(
DATE '2026-05-01',
'MONTH YYYY',
'NLS_DATE_LANGUAGE=GERMAN'
) AS monat
FROM dual;
Das Ergebnis enthält zwischen MAI und 2026 mehrere unsichtbare Leerzeichen:
MAI 2026
Wie viele Leerzeichen ergänzt werden, hängt von der Länge des längsten Monatsnamens in der verwendeten Sprache ab. Bei deutscher Sprache wird MAI auf die Länge von SEPTEMBER erweitert.
Das lässt sich mit LENGTH sichtbar machen:
SELECT
LENGTH(
TO_CHAR(
DATE '2026-05-01',
'MONTH',
'NLS_DATE_LANGUAGE=GERMAN'
)
) AS laenge_mit_padding,
LENGTH(
TO_CHAR(
DATE '2026-05-01',
'FMMONTH',
'NLS_DATE_LANGUAGE=GERMAN'
)
) AS laenge_ohne_padding
FROM dual;
Ergebnis:
LAENGE_MIT_PADDING 9
LAENGE_OHNE_PADDING 3
Leerzeichen mit FM entfernen
FM steht für Fill Mode. Der Modifikator unterdrückt die automatische Auffüllung mit Leerzeichen und bei numerischen Datumselementen auch führende Nullen.
SELECT TO_CHAR(
DATE '2026-05-01',
'FMMONTH YYYY',
'NLS_DATE_LANGUAGE=GERMAN'
) AS monat
FROM dual;
Ergebnis:
MAI 2026
Das ist besonders für folgende Anwendungsfälle relevant:
- Dropdown-Listen
- CSV-Exporte
- Berichtsspalten
- dynamische Texte
- Gruppierungsbezeichnungen
- JSON- oder XML-Ausgaben
- Dateinamen
Oracle beschreibt FM als Formatmodifikator, der führende und nachfolgende Auffüllzeichen unterdrückt. Der Modifikator wirkt ab seiner Position im Formatmodell und kann bei mehrfacher Verwendung ein- und ausgeschaltet werden.
Achtung: FM entfernt auch führende Nullen
FM entfernt nicht nur Leerzeichen bei Monatsnamen. Es unterdrückt auch führende Nullen bei numerischen Datumsbestandteilen.
SELECT
TO_CHAR(
DATE '2026-05-01',
'DD.MM.YYYY'
) AS mit_nullen,
TO_CHAR(
DATE '2026-05-01',
'FMDD.MM.YYYY'
) AS ohne_nullen
FROM dual;
Ergebnis:
MIT_NULLEN 01.05.2026
OHNE_NULLEN 1.5.2026
Soll der Tag zweistellig bleiben, während nur die Leerzeichen hinter dem Monatsnamen verschwinden, können zwei Ausgaben kombiniert werden:
SELECT
TO_CHAR(
DATE '2026-05-01',
'DD. '
)
||
TO_CHAR(
DATE '2026-05-01',
'FMMonth YYYY',
'NLS_DATE_LANGUAGE=GERMAN'
) AS datum
FROM dual;
Ergebnis:
01. Mai 2026
Monats- und Wochentagsnamen hängen normalerweise von der Spracheinstellung der aktuellen Oracle-Session ab. Dadurch kann dieselbe Abfrage auf verschiedenen Systemen unterschiedliche Ergebnisse liefern.
Eine stabile deutsche Ausgabe entsteht durch den dritten Parameter von TO_CHAR:
SELECT TO_CHAR(
DATE '2026-07-30',
'FMDay, DD. Month YYYY',
'NLS_DATE_LANGUAGE=GERMAN'
) AS datum
FROM dual;
Ergebnis:
Donnerstag, 30. Juli 2026
Für eine englische Ausgabe wird entsprechend ENGLISH verwendet:
SELECT TO_CHAR(
DATE '2026-07-30',
'FMDay, DD Month YYYY',
'NLS_DATE_LANGUAGE=ENGLISH'
) AS datum
FROM dual;
Ergebnis:
Thursday, 30 July 2026
Die Groß- und Kleinschreibung des ausgegebenen Monats- oder Wochentagsnamens richtet sich nach der Schreibweise im Formatmodell:
SELECT
TO_CHAR(
DATE '2026-07-30',
'DAY',
'NLS_DATE_LANGUAGE=GERMAN'
) AS gross,
TO_CHAR(
DATE '2026-07-30',
'Day',
'NLS_DATE_LANGUAGE=GERMAN'
) AS gemischt,
TO_CHAR(
DATE '2026-07-30',
'day',
'NLS_DATE_LANGUAGE=GERMAN'
) AS klein
FROM dual;
Typische Ausgabe:
DONNERSTAG
Donnerstag
donnerstag
Die Sprache kann direkt innerhalb des Funktionsaufrufs festgelegt werden und muss daher nicht global mit ALTER SESSION verändert werden.
TIMESTAMP mit Millisekunden formatieren
Der Datentyp DATE unterstützt keine Sekundenbruchteile. Dafür wird TIMESTAMP verwendet.
SELECT TO_CHAR(
TIMESTAMP '2026-07-30 14:05:09.123456',
'DD.MM.YYYY HH24:MI:SS.FF3'
) AS zeitstempel
FROM dual;
Ergebnis:
30.07.2026 14:05:09.123
FF3 gibt drei Stellen der Sekundenbruchteile aus. Möglich sind Werte von FF1 bis FF9, sofern die Genauigkeit des verwendeten Datentyps dies unterstützt.
Ein Zeitstempel mit Zeitzonenverschiebung kann so dargestellt werden:
SELECT TO_CHAR(
SYSTIMESTAMP,
'DD.MM.YYYY HH24:MI:SS.FF3 TZH:TZM'
) AS zeitstempel
FROM dual;
SYSTIMESTAMP liefert die Systemzeit des Datenbankservers einschließlich Sekundenbruchteilen und Zeitzone.
Die wichtigsten Zahlenformate
| Format | Bedeutung |
9 | Optionale Ziffer; nicht benötigte Stellen werden zu Leerzeichen |
0 | Erzwungene Ziffer beziehungsweise führende oder nachfolgende Null |
D | Dezimaltrennzeichen gemäß NLS-Einstellung |
G | Gruppierungszeichen gemäß NLS-Einstellung |
FM | Entfernt führende und nachfolgende Auffüllzeichen |
MI | Minuszeichen hinter der Zahl |
S | Explizites Plus- oder Minuszeichen |
PR | Negative Zahl in spitzen Klammern |
L | Lokales Währungssymbol |
C | Internationales Währungssymbol |
Der Unterschied zwischen 9 und 0
9 reserviert eine mögliche Ziffernposition. Nicht benötigte führende Stellen werden als Leerzeichen ausgegeben.
0 erzwingt dagegen eine Ziffer und ergänzt bei Bedarf eine Null.
SELECT
TO_CHAR(7, 'FM999') AS ohne_nullen,
TO_CHAR(7, 'FM000') AS mit_nullen
FROM dual;
Ergebnis:
OHNE_NULLEN 7
MIT_NULLEN 007
Für normale Zahlenanzeigen wird meist 9 verwendet. 0 ist sinnvoll, wenn eine feste Stellenanzahl benötigt wird, beispielsweise bei Nummernkreisen oder technischen Exportformaten.
Führende Leerzeichen bei Zahlen entfernen
Oracle reserviert bei normalen Zahlenformaten standardmäßig Platz für ein mögliches Vorzeichen. Positive Zahlen können deshalb mit einem führenden Leerzeichen ausgegeben werden.
SELECT
'[' || TO_CHAR(123, '999') || ']' AS ohne_fm,
'[' || TO_CHAR(123, 'FM999') || ']' AS mit_fm
FROM dual;
Ergebnis:
OHNE_FM [ 123]
MIT_FM [123]
Die eckigen Klammern machen das sonst kaum sichtbare Leerzeichen erkennbar.
Deutsche Dezimal- und Tausendertrennzeichen verwenden
Für eine deutsche Zahlenformatierung sollte nicht direkt mit Punkten und Kommas im Formatmodell gearbeitet werden. Besser sind die NLS-abhängigen Elemente:
Dfür das DezimaltrennzeichenGfür das Gruppierungszeichen
SELECT TO_CHAR(
1234567.89,
'FM999G999G990D00',
'NLS_NUMERIC_CHARACTERS='',.'''
) AS betrag
FROM dual;
Ergebnis:
1.234.567,89
Bei NLS_NUMERIC_CHARACTERS=',.' steht das erste Zeichen für das Dezimalzeichen und das zweite für das Gruppierungszeichen.
Für eine englische Darstellung werden die Zeichen umgekehrt:
SELECT TO_CHAR(
1234567.89,
'FM999G999G990D00',
'NLS_NUMERIC_CHARACTERS=''.,'''
) AS amount
FROM dual;
Ergebnis:
1,234,567.89
Die explizite Angabe des NLS-Parameters verhindert, dass das Ergebnis von der Session-Konfiguration des jeweiligen Benutzers oder Servers abhängt.
Geldbeträge in Euro formatieren
Für eine stabile deutschsprachige Darstellung kann das Eurozeichen als Text angehängt werden:
SELECT
TO_CHAR(
1234.5,
'FM999G999G990D00',
'NLS_NUMERIC_CHARACTERS='',.'''
) || ' €' AS betrag
FROM dual;
Ergebnis:
1.234,50 €
Das Format besitzt genügend Stellen für größere Werte und erzwingt zwei Nachkommastellen.
Wird ein zu kleines Formatmodell verwendet, ersetzt Oracle den Wert durch Rauten:
SELECT TO_CHAR(
1234567.89,
'FM999D00',
'NLS_NUMERIC_CHARACTERS='',.'''
) AS betrag
FROM dual;
Mögliches Ergebnis:
########
Die Formatmaske muss daher auf den größten erwarteten Wert abgestimmt werden. Oracle rundet Zahlen auf die im Formatmodell vorgesehene Genauigkeit. Reichen die Vorkommastellen nicht aus, wird der Wert durch #-Zeichen ersetzt.
Negative Zahlen formatieren
Standarddarstellung
Ohne speziellen Vorzeichenparameter steht das Minuszeichen vor der Zahl:
SELECT TO_CHAR(
-1234.5,
'FM999G990D00',
'NLS_NUMERIC_CHARACTERS='',.'''
) AS betrag
FROM dual;
Ergebnis:
-1.234,50
Minuszeichen hinter der Zahl mit MI
MI setzt das Minuszeichen hinter die Zahl:
SELECT TO_CHAR(
-1234.5,
'FM999G990D00MI',
'NLS_NUMERIC_CHARACTERS='',.'''
) AS betrag
FROM dual;
Ergebnis:
1.234,50-
Bei einer positiven Zahl erzeugt MI normalerweise ein nachfolgendes Leerzeichen. Durch FM wird dieses Leerzeichen entfernt.
MI darf nur an der letzten Position des Zahlenformatmodells stehen.
Plus- und Minuszeichen mit S
S gibt sowohl bei positiven als auch bei negativen Zahlen ein Vorzeichen aus:
SELECT
TO_CHAR(125, 'FMS999') AS positiv,
TO_CHAR(-125, 'FMS999') AS negativ
FROM dual;
Ergebnis:
POSITIV +125
NEGATIV -125
S darf am Anfang oder am Ende des Formatmodells stehen.
Negative Zahlen in Klammern mit PR
PR stellt negative Werte in spitzen Klammern dar:
SELECT TO_CHAR(
-1234.5,
'FM999G990D00PR',
'NLS_NUMERIC_CHARACTERS='',.'''
) AS betrag
FROM dual;
Ergebnis:
<1.234,50>
Diese Darstellung wird teilweise in Buchhaltungs- und Berichtssystemen verwendet.
Text wieder in Datum oder Zahl umwandeln
TO_CHAR konvertiert einen Wert in Text. Für die umgekehrte Richtung werden TO_DATE, TO_TIMESTAMP oder TO_NUMBER verwendet.
Text in ein Datum umwandeln
SELECT TO_DATE(
'30.07.2026',
'DD.MM.YYYY'
) AS datum
FROM dual;
Text in einen Zeitstempel umwandeln
SELECT TO_TIMESTAMP(
'30.07.2026 14:05:09.123',
'DD.MM.YYYY HH24:MI:SS.FF3'
) AS zeitstempel
FROM dual;
Deutschen Zahlentext in NUMBER umwandeln
SELECT TO_NUMBER(
'1.234,50',
'999G999D00',
'NLS_NUMERIC_CHARACTERS='',.'''
) AS betrag
FROM dual;
Das Ergebnis ist wieder ein echter Zahlenwert und kein Text.
Eingaben mit FX streng prüfen
Oracle kann bei Datumsumwandlungen teilweise toleranter sein, als es für Imports oder Schnittstellen gewünscht ist. FX steht für Format Exact und verlangt eine genaue Übereinstimmung zwischen Eingabetext und Formatmodell.
SELECT TO_DATE(
'30.07.2026',
'FXDD.MM.YYYY'
) AS datum
FROM dual;
Mit FX müssen Trennzeichen, Reihenfolge und Stellenanzahl dem angegebenen Format entsprechen. Der Modifikator eignet sich daher für kontrollierte Dateiimporte und Schnittstellenvalidierungen.
Häufige Fehler bei der Formatierung
1. Implizite Datumsumwandlungen verwenden
Problematisch:
WHERE rechnungsdatum = '30.07.2026'
Oracle muss den Text abhängig von der aktuellen NLS_DATE_FORMAT-Einstellung implizit in ein Datum umwandeln. Die Abfrage kann deshalb in einer Session funktionieren und in einer anderen einen Fehler liefern.
Besser:
WHERE rechnungsdatum = DATE '2026-07-30'
Oder bei einem Datum mit möglichem Zeitanteil:
WHERE rechnungsdatum >= DATE '2026-07-30'
AND rechnungsdatum < DATE '2026-07-31'
Das ANSI-Datumsliteral besitzt immer das Format YYYY-MM-DD und ist nicht von der Spracheinstellung der Session abhängig.
2. Formatierte Datumswerte sortieren
Problematisch:
SELECT TO_CHAR(rechnungsdatum, 'DD.MM.YYYY') AS datum
FROM rechnungen
ORDER BY TO_CHAR(rechnungsdatum, 'DD.MM.YYYY');
Hier wird alphabetisch nach Text sortiert. Dadurch kann beispielsweise der 31. Januar vor dem 2. Februar erscheinen.
Besser:
SELECT TO_CHAR(rechnungsdatum, 'DD.MM.YYYY') AS datum
FROM rechnungen
ORDER BY rechnungsdatum;
Die Anzeige wird formatiert, die Sortierung erfolgt aber weiterhin mit dem echten Datumswert.
3. Nach formatierten Monatsnamen gruppieren
Problematisch:
SELECT
TO_CHAR(rechnungsdatum, 'MONTH') AS monat,
SUM(nettobetrag)
FROM rechnungen
GROUP BY TO_CHAR(rechnungsdatum, 'MONTH');
Dabei entstehen mehrere Schwierigkeiten:
- Monatsnamen enthalten möglicherweise Leerzeichen.
- Die Sprache hängt von der Session ab.
- Gleiche Monate unterschiedlicher Jahre werden zusammengefasst.
- Die chronologische Sortierung geht verloren.
Besser:
SELECT
TO_CHAR(
TRUNC(rechnungsdatum, 'MM'),
'FMMonth YYYY',
'NLS_DATE_LANGUAGE=GERMAN'
) AS monat,
SUM(nettobetrag) AS summe
FROM rechnungen
GROUP BY TRUNC(rechnungsdatum, 'MM')
ORDER BY TRUNC(rechnungsdatum, 'MM');
Damit bleibt der echte Monatswert Grundlage für Gruppierung und Sortierung. Nur die sichtbare Bezeichnung wird formatiert.
4. Zahlen bereits vor der Berechnung formatieren
Problematisch:
SELECT
TO_CHAR(nettobetrag, 'FM999D00') * 1.20
FROM rechnungen;
TO_CHAR liefert Text zurück. Für weitere Berechnungen sollte immer der ursprüngliche Zahlenwert verwendet werden.
Besser:
SELECT
TO_CHAR(
nettobetrag * 1.20,
'FM999G999G990D00',
'NLS_NUMERIC_CHARACTERS='',.'''
) AS bruttobetrag
FROM rechnungen;
Zuerst wird gerechnet, danach wird ausschließlich das Endergebnis formatiert.
5. MI bei Datumsformaten und Zahlenformaten verwechseln
Bei Datumsformaten steht MI für Minuten:
TO_CHAR(SYSDATE, 'HH24:MI')
Bei Zahlenformaten steht MI für ein nachgestelltes Minuszeichen:
TO_CHAR(-125, 'FM999MI')
Die Bedeutung ergibt sich aus dem Datentyp und dem verwendeten Formatmodell.
TO_CHAR oder TRIM?
Bei einem gepolsterten Monatsnamen könnte auch TRIM verwendet werden:
SELECT TRIM(
TO_CHAR(
DATE '2026-05-01',
'MONTH',
'NLS_DATE_LANGUAGE=GERMAN'
)
) AS monat
FROM dual;
Das funktioniert, ist aber bei reinen Formatierungsaufgaben meist unnötig kompliziert.
Direkter:
SELECT TO_CHAR(
DATE '2026-05-01',
'FMMONTH',
'NLS_DATE_LANGUAGE=GERMAN'
) AS monat
FROM dual;
TRIM bleibt sinnvoll, wenn bereits vorhandene Texte bearbeitet werden. Für das Verhalten eines Oracle-Formatmodells ist FM normalerweise die klarere Lösung.
Kompakte Praxisbeispiele
Deutsches Datum
TO_CHAR(
datum,
'DD.MM.YYYY'
)
Deutsches Datum mit ausgeschriebenem Monat
TO_CHAR(
datum,
'FMDD. Month YYYY',
'NLS_DATE_LANGUAGE=GERMAN'
)
Datum und Uhrzeit
TO_CHAR(
datum,
'DD.MM.YYYY HH24:MI:SS'
)
ISO-ähnliche Ausgabe
TO_CHAR(
datum,
'YYYY-MM-DD'
)
Deutscher Geldbetrag
TO_CHAR(
betrag,
'FM999G999G990D00',
'NLS_NUMERIC_CHARACTERS='',.'''
) || ' €'
Negativer Geldbetrag mit nachgestelltem Minus
TO_CHAR(
betrag,
'FM999G999G990D00MI',
'NLS_NUMERIC_CHARACTERS='',.'''
) || ' €'
Monat ohne zusätzliche Leerzeichen
TO_CHAR(
datum,
'FMMONTH',
'NLS_DATE_LANGUAGE=GERMAN'
)
Häufige Fragen
Warum fügt Oracle bei MONTH Leerzeichen ein?
Oracle füllt ausgeschriebene Monatsnamen standardmäßig auf die Länge des längsten Monatsnamens der jeweiligen Sprache auf. Dadurch besitzen alle Ausgaben eine einheitliche Breite.
Wie entferne ich Leerzeichen hinter Monatsnamen?
Mit dem Formatmodifikator FM:
TO_CHAR(datum, 'FMMONTH')
Warum steht vor einer positiven Zahl ein Leerzeichen?
Oracle reserviert standardmäßig eine Position für ein mögliches Vorzeichen. FM entfernt diese Auffüllung.
TO_CHAR(123, 'FM999')
Wie formatiere ich eine Zahl mit deutschem Dezimalkomma?
TO_CHAR(
zahl,
'FM999G999D00',
'NLS_NUMERIC_CHARACTERS='',.'''
)
Wie setze ich das Minuszeichen hinter die Zahl?
Mit MI am Ende des Formatmodells:
TO_CHAR(-125, 'FM999MI')
Wie erhalte ich deutsche Monatsnamen?
Mit dem dritten Parameter:
TO_CHAR(
datum,
'FMMonth YYYY',
'NLS_DATE_LANGUAGE=GERMAN'
)
Kann ich nach einer mit TO_CHAR formatierten Zahl weiterrechnen?
Technisch kann Oracle versuchen, den Text wieder implizit in eine Zahl umzuwandeln. Das sollte vermieden werden. Berechnungen gehören vor TO_CHAR; die Funktion sollte erst für die endgültige Anzeige eingesetzt werden.
Fazit
TO_CHAR ist die zentrale Oracle-Funktion für die kontrollierte Ausgabe von Datumswerten, Zeitstempeln und Zahlen.
Die wichtigsten Regeln sind:
FMentfernt automatische Leerzeichen und führende Nullen.MIsetzt das Minuszeichen hinter eine Zahl.Sgibt ein ausdrückliches Plus- oder Minuszeichen aus.DundGverwenden konfigurierbare Dezimal- und Gruppierungszeichen.NLS_DATE_LANGUAGEstabilisiert Monats- und Wochentagsnamen.NLS_NUMERIC_CHARACTERSstabilisiert Zahlenformate.TO_CHARsollte erst für die endgültige Darstellung verwendet werden.- Sortierung, Gruppierung, Filterung und Berechnung sollten mit den ursprünglichen Datums- und Zahlenwerten erfolgen.
Damit bleiben SQL-Abfragen unabhängig von Session-Einstellungen, leichter wartbar und für Berichte, Exporte sowie Anwendungen zuverlässig verwendbar.