Om een getal als valuta in Postgres op te maken, kunt u het ofwel converteren naar het gegevenstype geld, of to_char()
gebruiken om het te converteren naar tekst die het juiste valutasymbool bevat.
Dit veronderstelt uiteraard dat het nummer niet al is opgeslagen met het geldtype.
Hieronder staan voorbeelden van elk van deze opties.
Omzetten in geld
Hier is een voorbeeld van het converteren van een getal naar het gegevenstype geld.
SELECT cast(12 as money);
Resultaat:
$12.00
Hier is nog een voorbeeld, dit keer met een grotere hoeveelheid.
SELECT cast(123456.78 as money);
Resultaat:
$123,456.78
Converteren vanuit een drijvende-kommagetal
Het wordt afgeraden om drijvende-kommagetallen te gebruiken om met geld om te gaan vanwege de kans op afrondingsfouten. Als u het echter moet doen, kunt u het eerst converteren naar numeriek en vervolgens naar geld.
SELECT '123456.78'::float8::numeric::money;
Resultaat:
$123,456.78
Als je probeert om rechtstreeks van drijvende komma naar geld te converteren, krijg je een foutmelding.
SELECT '123456.78'::float8::money;
Resultaat:
ERROR: cannot cast type double precision to money
Converteren naar tekst
Hier is een voorbeeld van het gebruik van to_char()
om de waarde om te zetten in tekst met het valutasymbool erbij.
SELECT to_char(12, 'L99D99');
Resultaat:
$ 12.00
Hier gebruiken zowel het valutasymbool als de decimale plaats de huidige landinstelling.
De opmaakreeks voor to_char()
moet passen bij het verwachte bedrag.
Als het bedrag bijvoorbeeld in de honderdduizenden zou kunnen lopen, dan zou de volgende opmaakreeks geschikter zijn.
SELECT to_char(123456.78, 'L999G999D99');
Resultaat:
$ 123,456.78
In dit geval heb ik de G
. toegevoegd sjabloonpatroon voor een lokaal-bewust groepsscheidingsteken (ook wel een 'duizenden-scheidingsteken' genoemd). Ik had een komma kunnen gebruiken (,
), maar dat zou niet locale-aware zijn geweest.
En ik heb opnieuw de D
. toegevoegd sjabloonpatroon voor een locale-aware decimale punt.
Dit is wat er gebeurt als ik die twee sjabloonpatronen uit mijn opmaakreeks verwijder.
SELECT to_char(123456.78, 'L999999');
Resultaat:
$ 123457
Onbeduidende nullen
U kunt 0
. gebruiken in plaats van 9
om onbeduidende nullen te behouden.
De 9
sjabloonpatroon laat alle onbeduidende nullen vallen terwijl de 0
sjabloonpatroon niet.
Hier is een voorbeeld dat het verschil tussen de twee illustreert.
SELECT
to_char(12, 'L9999') AS "L9999",
to_char(12, 'L0000') AS "L0000";
Resultaat:
L9999 | L0000 --------+-------- $ 12 | $ 0012
Vulmodus
Er is een handige sjabloonpatroonmodifier genaamd FM
. Dit is voor de "vulmodus" en onderdrukt nullen en voorloopspaties.
We kunnen die modifier daarom gebruiken om het vorige voorbeeld aan te passen.
SELECT
to_char(12, 'LFM9999') AS "LFM9999",
to_char(12, 'LFM0000') AS "LFM0000";
Resultaat:
LFM9999 | LFM0000 ---------+--------- $12 | $0012
Merk op dat het de eerste spaties tussen het dollarteken en het getal onderdrukte.