I PostgreSQL kan vi bruge TO_CHAR()
funktion til at tilføje indledende nuller til et tal. Funktionen konverterer tallet til en streng ved at bruge det (valgfrie) format, vi angiver.
En anden mulighed er at bruge LPAD()
funktion til at udfylde et tal med indledende nuller.
TO_CHAR()
Funktion
Når du bruger TO_CHAR()
funktion, skal du bruge 0
formatelement for at inkludere foranstillede og/eller efterfølgende nuller.
Eksempel:
SELECT TO_CHAR(7, 'fm000');
Resultat:
007
Her er den sammenlignet med 9
formatelement:
SELECT
TO_CHAR(7, 'fm999') AS "9",
TO_CHAR(7, 'fm000') AS "0";
Resultat:
9 | 0 ---+----- 7 | 007
Antallet af foranstillede nuller bestemmes af antallet af 0
formatelementer og antallet af cifre i tallet:
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
formatmodifikator undertrykker enhver førende og/eller efterfølgende polstring, der kan være inkluderet i resultatet. For eksempel, når tallet er negativt, er et minustegn foran. Men når tallet er positivt, er der intet tegn med, og der vises et mellemrum, hvor plustegnet ville have været.
Her er et eksempel til at demonstrere dette:
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 bruge LPAD()
funktion til at udfylde tal med indledende nuller:
SELECT LPAD('7', 3, '0');
Resultat:
007
Et andet eksempel:
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
Bemærk, at denne funktion kræver, at tallet sendes som en streng. Derfor skal vi først konvertere tallet til en streng. Udfyldningstegnet skal også være en streng.
Så vi bliver måske nødt til at gøre sådan noget:
SELECT LPAD(CAST(7 AS varchar), 3, '0');
Resultat:
007
En af fordelene ved LPAD()
har i forhold til den tidligere metode er, at vi kan præfikse resultatet andre tegn - det behøver ikke at være et foranstillet nul.
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