sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan formateres tal som valuta i PostgreSQL

For at formatere et tal som valuta i Postgres kan du enten konvertere det til pengedatatypen eller bruge to_char() for at konvertere det til tekst, der indeholder det relevante valutasymbol.

Dette forudsætter naturligvis, at nummeret ikke allerede er gemt ved hjælp af pengetypen.

Nedenfor er eksempler på hver af disse muligheder.

Konverter til penge

Her er et eksempel på konvertering af et tal til pengedatatypen.

SELECT cast(12 as money);

Resultat:

$12.00

Her er endnu et eksempel, denne gang med et større beløb.

SELECT cast(123456.78 as money);

Resultat:

$123,456.78

Konverter fra et flydende kommatal

Det frarådes at bruge flydende kommatal til at håndtere penge på grund af muligheden for afrundingsfejl. Men hvis du skal gøre det, kan du først konvertere til numerisk og derefter til penge.

SELECT '123456.78'::float8::numeric::money;

Resultat:

$123,456.78

Hvis du forsøger at konvertere direkte fra floating point til penge, får du en fejl.

SELECT '123456.78'::float8::money;

Resultat:

ERROR:  cannot cast type double precision to money

Konverter til tekst

Her er et eksempel på brug af to_char() at konvertere værdien til tekst med valutasymbolet inkluderet.

SELECT to_char(12, 'L99D99');

Resultat:

$ 12.00

Her bruger både valutasymbolet og decimalen den aktuelle lokalitet.

Formatstrengen for to_char() skal passe til det forventede beløb.

For eksempel, hvis beløbet kunne gå op i hundredtusindvis, ville følgende formatstreng være mere passende.

SELECT to_char(123456.78, 'L999G999D99');

Resultat:

$123,456.78

I dette tilfælde tilføjede jeg G skabelonmønster for en lokalitetsbevidst gruppeseparator (også kaldet en "tusinderseparator"). Jeg kunne have brugt et komma (, ), men det ville ikke have været lokalitetsbevidst.

Og jeg tilføjede igen D skabelonmønster for et lokalitetsbevidst decimaltegn.

Her er, hvad der sker, hvis jeg fjerner de to skabelonmønstre fra min formatstreng.

SELECT to_char(123456.78, 'L999999');

Resultat:

$ 123457

Ubetydelige nuller

Du kan bruge 0 i stedet for 9 at beholde ubetydelige nuller.

9 skabelonmønsteret taber alle ubetydelige nuller, mens 0 skabelonmønster gør det ikke.

Her er et eksempel, der illustrerer forskellen mellem de to.

SELECT 
  to_char(12, 'L9999') AS "L9999",
  to_char(12, 'L0000') AS "L0000";

Resultat:

 L9999  | L0000  
--------+--------
 $   12 | $ 0012

Fyldtilstand

Der er en praktisk skabelonmønstermodifikator kaldet FM . Dette er til "udfyldningstilstand", og det undertrykker efterfølgende nuller og førende blanktegn.

Vi kan derfor bruge denne modifikator til at ændre det foregående eksempel.

SELECT 
  to_char(12, 'LFM9999') AS "LFM9999",
  to_char(12, 'LFM0000') AS "LFM0000";

Resultat:

 LFM9999 | LFM0000 
---------+---------
 $12     | $0012

Bemærk, at det undertrykte de førende tomme felter mellem dollartegnet og tallet.


  1. Få styr på native Oracle Connection i Hibernate 4 for at køre en lagret proc

  2. MySQL:Vis med underforespørgsel i FROM-klausulens begrænsning

  3. PostgreSQL - deaktivering af begrænsninger

  4. Sådan bruges EXECUTE FORMAT ... BRUG i postgres-funktionen