sql >> Databasteknik >  >> RDS >> PostgreSQL

2 sätt att lägga till ledande nollor i PostgreSQL

I PostgreSQL kan vi använda TO_CHAR() funktion för att lägga till inledande nollor till ett tal. Funktionen konverterar numret till en sträng med det (valfria) formatet vi anger.

Ett annat alternativ är att använda LPAD() funktion för att fylla ett tal med inledande nollor.

TO_CHAR() Funktion

När du använder TO_CHAR() funktionen, använd 0 formatelement för att inkludera inledande och/eller avslutande nollor.

Exempel:

SELECT TO_CHAR(7, 'fm000');

Resultat:

007

Här är den jämfört med 9 formatelement:

SELECT 
    TO_CHAR(7, 'fm999') AS "9",
    TO_CHAR(7, 'fm000') AS "0";

Resultat:

 9 |  0  
---+-----
 7 | 007

Antalet inledande nollor bestäms av antalet 0 formatelement och antalet siffror i numret:

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";

Resultat:

 r1 |  r2   |  r3   |  r4   |  r5   
----+-------+-------+-------+-------
 #  | 00077 | 00777 | 07777 | 77777

fm formatmodifierare undertrycker all inledande och/eller efterföljande utfyllnad som kan inkluderas i resultatet. Till exempel, när siffran är negativ, kommer ett minustecken före. Men när siffran är positiv ingår inget tecken, och ett mellanslag visas där plustecknet skulle ha varit.

Här är ett exempel som visar detta:

SELECT 
    TO_CHAR(-7, '000') AS "Minus Sign",
    TO_CHAR(7, '000') AS "Padded",
    TO_CHAR(7, 'fm000') AS "Not Padded";

Resultat:

 Minus Sign | Padded | Not Padded 
------------+--------+------------
 -007       |  007   | 007

LPAD() Funktion

Vi kan alternativt använda LPAD() funktion för att fylla ut siffror med inledande nollor:

SELECT LPAD('7', 3, '0');

Resultat:

007

Ett annat exempel:

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";

Resultat:

 r1 |  r2   |  r3   |  r4   |  r5   
----+-------+-------+-------+-------
 7  | 00077 | 00777 | 07777 | 77777

Observera att denna funktion kräver att numret skickas som en sträng. Därför måste vi först konvertera talet till en sträng. Utfyllnadstecknet måste också vara en sträng.

Så vi kanske måste göra något så här:

SELECT LPAD(CAST(7 AS varchar), 3, '0');

Resultat:

007

En av fördelarna med LPAD() har över den tidigare metoden är att vi kan prefixa resultatet till andra tecken – det behöver inte vara en inledande nolla.

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";

Resultat:

 r1 |  r2   |  r3   |  r4   |  r5   
----+-------+-------+-------+-------
 7  | ...77 | ..777 | .7777 | 77777

  1. Hur SQLite Ltrim() fungerar

  2. Hur hanterar jag att öppna/stänga Db-anslutning i en Go-app?

  3. Fel:INSERT EXEC-satsen kan inte kapslas. och Kan inte använda ROLLBACK-satsen i en INSERT-EXEC-sats. Hur löser man detta?

  4. Möjligt att göra en MySQL främmande nyckel till en av två möjliga tabeller?