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.