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

2 způsoby, jak přidat úvodní nuly v PostgreSQL

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

  1. Oznámení ClusterControl 1.7.2:Vylepšené zálohování a podpora PostgreSQL pro TimescaleDB a MySQL 8.0

  2. postgresql migrace JSON na JSONB

  3. Pět hlavních úvah pro návrh indexu databáze na serveru SQL Server

  4. Odstraňte příspěvky a komentáře z Plánovače akcí