In Oracle Database können Sie Zahlen auf viele Arten formatieren.
Beispielsweise können Sie eine Zahl als Währung formatieren, mit Kommas und Dezimalpunkten an der richtigen Stelle. Sie können führende Nullen angeben, Sie können einen Bruchteil hinzufügen – oder ihn entfernen, wenn dies erforderlich ist.
Dieser Artikel enthält Beispiele für Folgendes:
- Zahlen als Währung formatieren
- Fügen Sie ein Komma/Tausendertrennzeichen hinzu
- Nachkommastellen einbeziehen
- Alle Dezimalstellen entfernen
- Fügen Sie führende Nullen zu einer Zahl hinzu
Ich erkläre auch, wie die Formatierung von den NLS-Parametern Ihrer Sitzung beeinflusst wird.
NLS-Initialisierungsparameter bestimmen, welche Zeichen für das Gruppentrennzeichen, das Dezimalzeichen und das Währungssymbol in der aktuellen Sitzung verwendet werden. Sie können diese Parameter nutzen, um eine gebietsschemaabhängige Formatierung auszugeben.
Sie können Funktionen wie TO_CHAR(number)
verwenden und sogar LPAD()
um Zahlen in eine Zeichenfolge umzuwandeln und sie im Handumdrehen genau so zu formatieren, wie Sie es möchten. Funktionen wie CAST()
kann sich auch auf die Formatierung einer Zahl auswirken, je nach Datentyp, in den sie umgewandelt wird.
Ein kurzes Beispiel
Hier ist ein kurzes Beispiel für die Formatierung einer Zahl mit TO_CHAR()
Funktion:
SELECT
TO_CHAR(12345, 'fmL99G999D00')
FROM DUAL;
Ergebnis:
$12,345.00
Der fmL99G999D00
part ist ein Formatmodell, das festlegt, wie die Ausgabe formatiert werden soll. Sie können das Formatmodell Ihren Anforderungen entsprechend ändern.
Jedes Zeichen im Formatmodell ist ein Formatelement und hat eine besondere Bedeutung. Sie können Formatelemente nach Bedarf hinzufügen oder entfernen.
Hier ist eine vollständige Liste der Formatelemente, die Sie für Ihr Formatmodell beim Formatieren von Zahlen verwenden können.
Es stimmt zwar, dass Sie für verschiedene Formatelemente (z. B. ein Dollarzeichen ($
) für Dollar), setzt dies voraus, dass die Währung auf diesen hartcodierten Wert lautet. Es gibt viele andere mögliche Währungen auf der ganzen Welt, und die Formatelemente können das lokale Währungssymbol für die Sitzung des Benutzers dynamisch zurückgeben.
Das Gleiche gilt für das Gruppentrennzeichen und das Dezimalzeichen. Unterschiedliche Gebietsschemas verwenden unterschiedliche Konventionen. Die Verwendung dieser länderspezifischen Formatelemente macht Ihren Code portabler.
Auch das TO_CHAR()
Mit der Funktion können Sie Ihre eigenen NLS-Parameter innerhalb der Funktion übergeben. Dies wirkt sich nur auf diesen Funktionsaufruf aus, sodass Sie Dinge wie Währungssymbole im Handumdrehen ändern können, ohne sie in Ihr Formatmodell fest codieren oder die NLS-Parameter für Ihre Sitzung aktualisieren zu müssen.
Die folgenden Beispiele zeigen detaillierter, wie jedes Formatelement funktioniert.
Zahlen als Währung formatieren
Hier ist ein Beispiel für die Formatierung einer Zahl als Währung:
SELECT
TO_CHAR(12, 'fmL99')
FROM DUAL;
Ergebnis:
$12
In diesem Fall habe ich das L
verwendet format-Element, um das lokale Währungssymbol anzugeben. Das lokale Währungssymbol wird durch NLS_CURRENCY
bestimmt Parameter.
Alternativ können Sie auch den C
verwenden oder U
Formatelemente, die das ISO-Währungssymbol bzw. das doppelte Währungssymbol zurückgeben.
Weitere Informationen und Beispiele finden Sie unter So formatieren Sie Zahlen als Währung in Oracle.
Fügen Sie ein Komma/Tausender-Trennzeichen hinzu
Sie können zwar immer ein fest codiertes Komma für Ihr Tausender-/Gruppentrennzeichen verwenden, dies berücksichtigt jedoch nicht Länder, die einen Punkt als Gruppentrennzeichen verwenden. Das Gegenteil ist offensichtlich wahr. Außerdem trennen einige Länder Tausende von Gruppen mit einem dünnen Raum.
Sie können das G
verwenden format-Element, um ein Gruppentrennzeichen anzugeben. Dies gibt dynamisch das anwendbare Gruppentrennzeichen zurück, wie in NLS_NUMERIC_CHARACTERS
angegeben Parameter. Dieser Parameter bestimmt sowohl das Gruppentrennzeichen als auch das Dezimalzeichen.
Beispiel:
SELECT
TO_CHAR(12345, 'fm99G999')
FROM DUAL;
Ergebnis:
12,345
Hier ist ein weiteres Beispiel mit einer größeren Zahl:
SELECT
TO_CHAR(123456789, 'fm999G999G999')
FROM DUAL;
Ergebnis:
123,456,789
Siehe How to Format a Number with a Comma in Oracle für eine ausführlichere Diskussion.
Dezimalstellen einbeziehen
Es stimmt zwar, dass Sie Ihr eigenes Radix-Zeichen (z. B. einen Punkt) in Ihr Formatmodell fest codieren können, dies wird jedoch nicht für andere Gebietsschemata berücksichtigt, die ein anderes Zeichen verwenden.
Sie können das D
verwenden format-Element, um das Dezimal-/Basiszeichen zurückzugeben, das in NLS_NUMERIC_CHARACTERS
angegeben ist Parameter für die aktuelle Sitzung:
SELECT
TO_CHAR(7, 'fm9D00')
FROM DUAL;
Ergebnis:
7.00
In diesem Fall habe ich zwei 0
verwendet Formatelemente nach dem Basiszeichen. Dieses Formatelement gibt gegebenenfalls nachgestellte Nullen zurück.
Mit einem 9
würde in diesem Fall alle nachgestellten Nullen unterdrücken:
SELECT
TO_CHAR(7, 'fm9D99')
FROM DUAL;
Ergebnis:
7.
Wenn wir jedoch den fm
format modifier erhalten wir ein anderes Ergebnis:
SELECT
TO_CHAR(7, '9D99')
FROM DUAL;
Ergebnis:
7.00
Der fm
Der Formatmodifikator unterdrückt jegliches Padding, das auf das Ergebnis angewendet wurde. Durch das Entfernen wird unser Ergebnis aufgefüllt. Es enthält ein führendes Leerzeichen, weil hier ein negatives Vorzeichen stehen würde, wenn die Zahl negativ gewesen wäre. Und es enthält auch nachgestellte Nullen, weil wir zwei 9
angegeben haben Formatelemente.
Weitere Ideen zum Formatieren von Zahlen mit Dezimalstellen finden Sie unter 3 Möglichkeiten zum Formatieren einer Zahl mit 2 Dezimalstellen in Oracle.
Alle Dezimalstellen entfernen
Es gibt mehrere Möglichkeiten, eine Zahl ohne Dezimalstellen zu formatieren. Eine naheliegende Möglichkeit besteht darin, einfach den Dezimalteil aus unserem Format-String zu entfernen:
SELECT
TO_CHAR(7, 'fm9')
FROM DUAL;
Ergebnis:
7
Wir können aber auch andere Funktionen verwenden, wie zum Beispiel ROUND()
, TRUNC()
, und CAST()
um den gleichen oder einen ähnlichen Effekt zu erzielen.
Beispiele finden Sie unter 4 Möglichkeiten zum Formatieren einer Zahl ohne Dezimalstellen in Oracle.
Füge führende Nullen hinzu
Wir haben ein paar Optionen, wenn es darum geht, führende Nullen zu unserer Nummer hinzuzufügen.
Bleiben Sie wieder beim TO_CHAR()
Funktion können wir die 0
verwenden format-Element, um führende und nachgestellte Nullen zurückzugeben.
SELECT
TO_CHAR(7, 'fm000')
FROM DUAL;
Ergebnis:
007
Wenn wir den 9
verwendet hätten format-Element hätten wir keine führenden Nullen:
SELECT
TO_CHAR(7, 'fm999')
FROM DUAL;
Ergebnis:
7
Wenn wir jedoch den fm
Formatmodifikator, hätten wir ein Leerzeichen bekommen, wo jede führende Null gewesen wäre:
SELECT
TO_CHAR(7, '999')
FROM DUAL;
Ergebnis:
7
Eine andere Möglichkeit, eine Zahl mit führenden Nullen zu formatieren, ist mit LPAD()
Funktion. Diese Funktion wendet linkes Padding auf eine Zeichenfolge oder Zahl an. Sie können angeben, welche Zeichen zum Auffüllen verwendet werden sollen. Wenn Sie also eine Null verwenden, wird diese mit Nullen aufgefüllt.
Ein Beispiel finden Sie unter 2 Möglichkeiten zum Formatieren einer Zahl mit führenden Nullen in Oracle.
Überprüfen der NLS-Parameter
Die NLS-Parameter (National Language Support) bestimmen das gebietsschemaspezifische Verhalten sowohl auf dem Client als auch auf dem Server. Dazu gehören Parameter, die bestimmen, welche Zeichen für Gruppentrennzeichen, Dezimalzeichen, Währungssymbole usw. verwendet werden sollen.
Lassen Sie uns den aktuellen Wert meiner NLS-Parameter überprüfen:
SELECT
PARAMETER,
VALUE
FROM V$NLS_PARAMETERS;
Ergebnis:
PARAMETER VALUE __________________________ _________________________________ NLS_LANGUAGE ENGLISH NLS_TERRITORY AUSTRALIA NLS_CURRENCY $ NLS_ISO_CURRENCY AUSTRALIA NLS_NUMERIC_CHARACTERS ., NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD/MON/RR NLS_DATE_LANGUAGE ENGLISH NLS_CHARACTERSET AL32UTF8 NLS_SORT BINARY NLS_TIME_FORMAT HH12:MI:SSXFF AM NLS_TIMESTAMP_FORMAT DD/MON/RR HH12:MI:SSXFF AM NLS_TIME_TZ_FORMAT HH12:MI:SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD/MON/RR HH12:MI:SSXFF AM TZR NLS_DUAL_CURRENCY $ NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE
Die folgenden Parameter bestimmen Formatierungselemente für Zahlen und Währungen:
NLS_CURRENCY
NLS_ISO_CURRENCY
NLS_NUMERIC_CHARACTERS
NLS_DUAL_CURRENCY
Der Standardwert dieser Parameter wird durch NLS_TERRITORY
bestimmt Parameter. Wenn wir den Wert von NLS_TERRITORY
festlegen -Parameter, setzt dies implizit den Wert für verschiedene andere Parameter (einschließlich der vier erwähnten).
In meinem Fall ist mein Gebiet Australien, und daher spiegeln diese vier Parameter wider, wie Zahlen in Australien normalerweise formatiert werden. Wenn ich es in Deutschland ändern würde, würden diese vier Parameter aktualisiert, um die Formatierung für Deutschland widerzuspiegeln.
Sie können jedoch jeden Parameter explizit einzeln festlegen. Dadurch können Sie den Wert überschreiben, der implizit durch NLS_TERRITORY
festgelegt wurde Parameter.