sql >> Databáze >  >> RDS >> PostgreSQL

Jak formátovat čísla jako měnu v PostgreSQL

Chcete-li naformátovat číslo jako měnu v Postgresu, můžete je buď převést na datový typ peněz, nebo použít to_char() převést jej na text, který obsahuje příslušný symbol měny.

To samozřejmě předpokládá, že číslo již není uloženo pomocí typu peněz.

Níže jsou uvedeny příklady každé z těchto možností.

Převést na peníze

Zde je příklad převodu čísla na datový typ peněz.

SELECT cast(12 as money);

Výsledek:

$12.00

Zde je další příklad, tentokrát s použitím větší částky.

SELECT cast(123456.78 as money);

Výsledek:

$123,456.78

Převod z čísla s plovoucí desetinnou čárkou

Nedoporučuje se používat čísla s pohyblivou řádovou čárkou pro manipulaci s penězi kvůli možnému zaokrouhlování. Pokud to však musíte udělat, můžete nejprve převést na numerické a poté na peníze.

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

Výsledek:

$123,456.78

Pokud se pokusíte převést přímo z pohyblivé řádové čárky na peníze, zobrazí se chyba.

SELECT '123456.78'::float8::money;

Výsledek:

ERROR:  cannot cast type double precision to money

Převést na text

Zde je příklad použití to_char() pro převod hodnoty na text se symbolem měny.

SELECT to_char(12, 'L99D99');

Výsledek:

$12.00

Zde symbol měny i desetinné místo používají aktuální národní prostředí.

Formátovací řetězec pro to_char() musí odpovídat očekávané částce.

Pokud by se například částka mohla pohybovat ve stovkách tisíc, pak by byl vhodnější následující formátovací řetězec.

SELECT to_char(123456.78, 'L999G999D99');

Výsledek:

$123,456.78

V tomto případě jsem přidal G vzor šablony pro oddělovač skupin s ohledem na národní prostředí (také označovaný jako „oddělovač tisíců“). Mohl jsem použít čárku (, ), ale to by neznal národní prostředí.

A znovu jsem přidal D vzor šablony pro desetinnou čárku s ohledem na národní prostředí.

Zde je to, co se stane, když odstraním tyto dva vzory šablon ze svého formátovacího řetězce.

SELECT to_char(123456.78, 'L999999');

Výsledek:

$ 123457

Nevýznamné nuly

Můžete použít 0 místo 9 udržet bezvýznamné nuly.

9 vzor šablony vynechá všechny nevýznamné nuly, zatímco 0 vzor šablony ne.

Zde je příklad, který ilustruje rozdíl mezi těmito dvěma.

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

Výsledek:

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

Režim plnění

Existuje praktický modifikátor vzoru šablony s názvem FM . Toto je pro „režim výplně“ a potlačuje koncové nuly a úvodní mezery.

Můžeme tedy použít tento modifikátor k úpravě předchozího příkladu.

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

Výsledek:

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

Všimněte si, že potlačila úvodní mezery mezi znakem dolaru a číslem.


  1. Tři hlavní důvody, proč se lidé stěhují do SaaS

  2. SQL, jak aktualizovat data

  3. Nelze předat hodnotu řetězce 1,2 jako vstup do dotazu Oracle

  4. Jak získám informace o vlastníkovi indexu a tabulky v Oracle?