Um eine Zahl in Postgres als Währung zu formatieren, können Sie sie entweder in den Gelddatentyp konvertieren oder to_char()
verwenden um es in Text umzuwandeln, der das entsprechende Währungssymbol enthält.
Dies setzt natürlich voraus, dass die Nummer nicht bereits mit dem Geldtyp gespeichert ist.
Nachfolgend finden Sie Beispiele für jede dieser Optionen.
In Geld umwandeln
Hier ist ein Beispiel für die Konvertierung einer Zahl in den Gelddatentyp.
SELECT cast(12 as money);
Ergebnis:
$12.00
Hier ist ein weiteres Beispiel, diesmal mit einer größeren Menge.
SELECT cast(123456.78 as money);
Ergebnis:
$123,456.78
Von einer Fließkommazahl umwandeln
Es wird davon abgeraten, Gleitkommazahlen zu verwenden, um mit Geld umzugehen, da es zu Rundungsfehlern kommen kann. Wenn Sie es jedoch tun müssen, können Sie zuerst in Zahlen und dann in Geld umwandeln.
SELECT '123456.78'::float8::numeric::money;
Ergebnis:
$123,456.78
Wenn Sie versuchen, direkt von Gleitkommazahlen in Geld umzuwandeln, erhalten Sie eine Fehlermeldung.
SELECT '123456.78'::float8::money;
Ergebnis:
ERROR: cannot cast type double precision to money
In Text umwandeln
Hier ist ein Beispiel für die Verwendung von to_char()
, um den Wert in Text mit eingeschlossenem Währungssymbol umzuwandeln.
SELECT to_char(12, 'L99D99');
Ergebnis:
$ 12.00
Hier verwenden sowohl das Währungssymbol als auch die Dezimalstelle das aktuelle Gebietsschema.
Die Formatzeichenfolge für to_char()
muss für die zu erwartende Menge angemessen sein.
Wenn der Betrag beispielsweise in die Hunderttausende gehen könnte, wäre die folgende Formatzeichenfolge besser geeignet.
SELECT to_char(123456.78, 'L999G999D99');
Ergebnis:
$123,456.78
In diesem Fall habe ich das G
hinzugefügt Vorlagenmuster für ein gebietsschemaabhängiges Gruppentrennzeichen (auch als „Tausendertrennzeichen“ bezeichnet). Ich hätte ein Komma verwenden können (,
), aber das wäre nicht gebietsschemaabhängig gewesen.
Und ich habe wieder das D
hinzugefügt Vorlagenmuster für einen länderspezifischen Dezimalpunkt.
Folgendes passiert, wenn ich diese beiden Vorlagenmuster aus meiner Formatzeichenfolge entferne.
SELECT to_char(123456.78, 'L999999');
Ergebnis:
$ 123457
Unbedeutende Nullen
Sie können 0
verwenden statt 9
unbedeutende Nullen zu behalten.
Die 9
Template-Muster löscht alle unbedeutenden Nullen, während 0
Vorlagenmuster nicht.
Hier ist ein Beispiel, das den Unterschied zwischen den beiden veranschaulicht.
SELECT
to_char(12, 'L9999') AS "L9999",
to_char(12, 'L0000') AS "L0000";
Ergebnis:
L9999 | L0000 --------+-------- $ 12 | $ 0012
Füllmodus
Es gibt einen praktischen Modifikator für Vorlagenmuster namens FM
. Dies ist für den „Füllmodus“ und unterdrückt nachgestellte Nullen und führende Leerzeichen.
Wir können daher diesen Modifikator verwenden, um das vorherige Beispiel zu modifizieren.
SELECT
to_char(12, 'LFM9999') AS "LFM9999",
to_char(12, 'LFM0000') AS "LFM0000";
Ergebnis:
LFM9999 | LFM0000 ---------+--------- $12 | $0012
Beachten Sie, dass die führenden Leerzeichen zwischen dem Dollarzeichen und der Zahl unterdrückt wurden.