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