sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man formaterar siffror som valuta i PostgreSQL

För att formatera ett tal som valuta i Postgres kan du antingen konvertera det till pengadatatypen eller använda to_char() för att konvertera den till text som innehåller lämplig valutasymbol.

Detta förutsätter uppenbarligen att numret inte redan är lagrat med pengatypen.

Nedan finns exempel på vart och ett av dessa alternativ.

Konvertera till pengar

Här är ett exempel på att konvertera ett nummer till pengadatatypen.

SELECT cast(12 as money);

Resultat:

$12.00

Här är ett annat exempel, den här gången med en större mängd.

SELECT cast(123456.78 as money);

Resultat:

$123,456.78

Konvertera från ett flyttal

Det rekommenderas att inte använda flyttal för att hantera pengar på grund av risken för avrundningsfel. Men om du måste göra det kan du först konvertera till numeriska och sedan till pengar.

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

Resultat:

$123,456.78

Om du försöker konvertera direkt från flyttal till pengar får du ett felmeddelande.

SELECT '123456.78'::float8::money;

Resultat:

ERROR:  cannot cast type double precision to money

Konvertera till text

Här är ett exempel på hur du använder to_char() för att konvertera värdet till text med valutasymbolen inkluderad.

SELECT to_char(12, 'L99D99');

Resultat:

$12.00

Här använder både valutasymbolen och decimalen det aktuella språket.

Formatsträngen för to_char() måste vara lämplig för det förväntade beloppet.

Om beloppet till exempel skulle kunna hamna i hundratusentals, skulle följande formatsträng vara mer lämplig.

SELECT to_char(123456.78, 'L999G999D99');

Resultat:

$123,456.78

I det här fallet lade jag till G mallmönster för en platsmedveten gruppseparator (även kallad en "tusentalsavgränsare"). Jag kunde ha använt ett kommatecken (, ), men det skulle inte ha varit lokalt medvetet.

Och jag lade till D igen mallmönster för en platsmedveten decimalkomma.

Det här är vad som händer om jag tar bort dessa två mallmönster från min formatsträng.

SELECT to_char(123456.78, 'L999999');

Resultat:

$ 123457

Oväsentliga nollor

Du kan använda 0 istället för 9 att behålla obetydliga nollor.

9 mallmönster tappar alla obetydliga nollor medan 0 mallmönster gör det inte.

Här är ett exempel som illustrerar skillnaden mellan de två.

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

Resultat:

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

Fyllningsläge

Det finns en praktisk mallmönstermodifierare som heter FM . Detta är för "fyllningsläge", och det undertrycker efterföljande nollor och inledande blanksteg.

Vi kan därför använda den modifieraren för att modifiera föregående exempel.

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

Resultat:

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

Lägg märke till att den undertryckte de inledande blanktecken mellan dollartecknet och siffran.


  1. Hur lägger man till på radera kaskadbegränsningar?

  2. Genomgång:Konfigurera SQL Server High Availability

  3. Att skapa en utlösare för infogning av underordnade tabeller returnerar ett förvirrande fel

  4. Ansluter postgresql med sqlalchemy