Při práci s Postgres můžete použít to_char()
funkce pro výstup čísel v daném formátu.
Funguje to tak, že uvedete dva argumenty. První argument je číslo, které se má formátovat. Druhý argument určuje, jak je formátován.
Vrácená hodnota je text .
V závislosti na vašich požadavcích můžete dát přednost převodu čísla na příslušný datový typ, například pomocí cast()
funkce.
Příklady obou metod jsou uvedeny níže.
Příklad
Zde je základní příklad k demonstraci.
SELECT to_char(10, '99.99');
Výsledek:
10.00
9
ve skutečnosti mají v tomto kontextu zvláštní význam. Tento znak je jedním z platných vzorů šablon, ze kterých se může skládat formátovací řetězec při formátování čísel.
V případě 9
, určuje pozici číslice, ale pokud je to úvodní nula, bude nahrazena mezerou, zatímco pokud je to koncová nula a je zadán režim vyplnění, bude smazána.
Pokud odstraním desetinné místo a část ve zlomcích sekund, dostanu jiný výsledek.
SELECT to_char(10, '99');
Výsledek:
10
Vypustit úvodní nuly
9
můžete nahradit s 0
pokud chcete potlačit úvodní a koncové nuly, i když jsou nevýznamné.
Zde je příklad, který ukazuje rozdíl mezi těmito dvěma.
SELECT
to_char(0010, '9999') AS "9999",
to_char(0010, '0000') AS "0000";
Výsledek:
9999 | 0000 -------+------- 10 | 0010
Vzory šablon
Jak je vidět v předchozích příkladech, formátovací řetězec se skládá z jednoho nebo více vzorů šablon.
Například 9999
je formátovací řetězec, který se skládá ze čtyř vzorů šablon – každý z nich je 9
.
Desetinné místo je další vzor šablony.
Mohl jsem použít D
místo desetinného místa. To používá aktuální národní prostředí pro skutečné formátování.
SELECT
to_char(10, '99.99') AS "99.99",
to_char(10, '99D99') AS "99D99";
Výsledek:
99.99 | 99D99 --------+-------- 10.00 | 10.00
Úplný seznam vzorů a modifikátorů šablon najdete v tématu Vzory šablon a modifikátory pro numerické formátování v Postgresu.
Modifikátory vzoru šablon
Existuje také několik modifikátorů, které lze použít spolu se vzorem šablony. Ty mění způsob formátování výstupu v závislosti na použitém modifikátoru.
Konkrétně existují tři modifikátory, které lze použít s číselným formátováním.
Modifikátor | Popis |
---|---|
FM prefix | režim vyplnění (potlačení koncových nul a výplňových mezer) |
TH přípona | velká přípona pořadového čísla |
th přípona | malá přípona řadového čísla |
Všimněte si, že první je přidán jako předpona vzoru šablony a další dva jsou přidány jako přípona.
Řadová čísla
Běžným požadavkem je převést číslo na ordinální číslo. Můžeme použít buď TH
nebo th
v závislosti na tom, zda chceme, aby přípona byla velká nebo malá.
Zde je příklad.
SELECT to_char(03, 'FM99th');
Výsledek:
3rd
V tomto případě jsem také použil FM
pro potlačení všech prázdných míst a koncových nul.
Zde je srovnání mezi používáním FM
a vynechání:
SELECT
to_char(03, '99th') AS "99th",
to_char(03, 'FM99th') AS "FM99th";
Výsledek:
99th | FM99th -------+-------- 3rd | 3rd
Pokud se podíváte pozorně, první sloupec obsahuje úvodní mezery, zatímco druhý sloupec ne.
Měna
Dalším běžným požadavkem je výstup čísla v dané měně.
V tomto případě můžeme použít L
vzor šablony pro zobrazení symbolu měny s ohledem na národní prostředí.
SELECT to_char(03, 'LFM99D00');
Výsledek:
$3.00
Čísla s podpisem
Existují také šablony vzorů pro podepsaná čísla.
Zde je příklad.
SELECT to_char(27, 'S99');
Výsledek:
+27
Zde jsem použil S
přidat znak s ohledem na národní prostředí, který je ukotven k číslu.
V tomto případě to bylo kladné číslo. Zde je další příklad, který používá zápornou hodnotu.
SELECT to_char(-27, 'S99');
Výsledek:
-27
Existuje několik dalších vzorů šablon, které lze použít pro podepsaná čísla.
Příklady najdete v tématu Přidání znaménka plus/mínus před číslo v Postgresu.
A jak již bylo zmíněno, podívejte se na šablony a modifikátory pro číselné formátování v Postgresu, kde najdete úplný seznam modifikátorů šablon, které můžete použít při formátování čísel.
Typ dat
Jak již bylo zmíněno, to_char()
funkce vypíše výsledek jako text .
V závislosti na vašich požadavcích může být lepší převést číslo na vhodnější datový typ.
Zde je příklad, který převádí číslo na peněžní data typ.
SELECT cast(10 as money);
Výsledek:
$10.00