V PostgreSQL můžeme použít TO_CHAR()
funkce pro přidání úvodních nul k číslu. Funkce převede číslo na řetězec pomocí (volitelného) formátu, který určíme.
Další možností je použít LPAD()
funkce pro doplnění čísla úvodními nulami.
TO_CHAR()
Funkce
Při použití TO_CHAR()
použijte 0
formátovací prvek tak, aby obsahoval úvodní a/nebo koncové nuly.
Příklad:
SELECT TO_CHAR(7, 'fm000');
Výsledek:
007
Tady to je ve srovnání s 9
prvek formátu:
SELECT
TO_CHAR(7, 'fm999') AS "9",
TO_CHAR(7, 'fm000') AS "0";
Výsledek:
9 | 0 ---+----- 7 | 007
Počet úvodních nul je určen číslem 0
prvky formátu a počet číslic v čísle:
SELECT
TO_CHAR(77, 'fm0') AS "r1",
TO_CHAR(77, 'fm00000') AS "r2",
TO_CHAR(777, 'fm00000') AS "r3",
TO_CHAR(7777, 'fm00000') AS "r4",
TO_CHAR(77777, 'fm00000') AS "r5";
Výsledek:
r1 | r2 | r3 | r4 | r5 ----+-------+-------+-------+------- # | 00077 | 00777 | 07777 | 77777
fm
Modifikátor formátu potlačuje veškeré počáteční a/nebo koncové odsazení, které by mohlo být zahrnuto ve výsledku. Například, když je číslo záporné, je předponou znaménko mínus. Ale když je číslo kladné, není zahrnuto žádné znaménko a na místě, kde by bylo znaménko plus, se objeví mezera.
Zde je příklad, který to demonstruje:
SELECT
TO_CHAR(-7, '000') AS "Minus Sign",
TO_CHAR(7, '000') AS "Padded",
TO_CHAR(7, 'fm000') AS "Not Padded";
Výsledek:
Minus Sign | Padded | Not Padded ------------+--------+------------ -007 | 007 | 007
LPAD()
Funkce
Alternativně můžeme použít LPAD()
funkce pro doplnění čísel úvodními nulami:
SELECT LPAD('7', 3, '0');
Výsledek:
007
Další příklad:
SELECT
LPAD('77', 1, '0') AS "r1",
LPAD('77', 5, '0') AS "r2",
LPAD('777', 5, '0') AS "r3",
LPAD('7777', 5, '0') AS "r4",
LPAD('77777', 5, '0') AS "r5";
Výsledek:
r1 | r2 | r3 | r4 | r5 ----+-------+-------+-------+------- 7 | 00077 | 00777 | 07777 | 77777
Všimněte si, že tato funkce vyžaduje, aby bylo číslo předáno jako řetězec. Proto musíme číslo nejprve převést na řetězec. Znak výplně také musí být řetězec.
Takže možná budeme muset udělat něco takového:
SELECT LPAD(CAST(7 AS varchar), 3, '0');
Výsledek:
007
Jedna z výhod, kterou LPAD()
oproti předchozí metodě je to, že před výsledkem můžeme uvést další znaky – nemusí to být úvodní nula.
SELECT
LPAD('77', 1, '.') AS "r1",
LPAD('77', 5, '.') AS "r2",
LPAD('777', 5, '.') AS "r3",
LPAD('7777', 5, '.') AS "r4",
LPAD('77777', 5, '.') AS "r5";
Výsledek:
r1 | r2 | r3 | r4 | r5 ----+-------+-------+-------+------- 7 | ...77 | ..777 | .7777 | 77777