In PostgreSQL kunnen we de TO_CHAR()
. gebruiken functie om voorloopnullen aan een getal toe te voegen. De functie converteert het getal naar een tekenreeks, met behulp van het (optionele) formaat dat we specificeren.
Een andere optie is om de LPAD()
. te gebruiken functie om een getal met voorloopnullen op te vullen.
De TO_CHAR()
Functie
Bij gebruik van de TO_CHAR()
functie, gebruik de 0
format-element om voorloop- en/of volgnullen op te nemen.
Voorbeeld:
SELECT TO_CHAR(7, 'fm000');
Resultaat:
007
Hier is het vergeleken met de 9
formaatelement:
SELECT
TO_CHAR(7, 'fm999') AS "9",
TO_CHAR(7, 'fm000') AS "0";
Resultaat:
9 | 0 ---+----- 7 | 007
Het aantal voorloopnullen wordt bepaald door het aantal 0
formaatelementen en het aantal cijfers in het getal:
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";
Resultaat:
r1 | r2 | r3 | r4 | r5 ----+-------+-------+-------+------- # | 00077 | 00777 | 07777 | 77777
De fm
format modifier onderdrukt alle voorloop- en/of volgopvulling die mogelijk in het resultaat is opgenomen. Als het getal bijvoorbeeld negatief is, wordt een minteken voorafgegaan. Maar als het getal positief is, wordt er geen teken opgenomen en verschijnt er een spatie waar het plusteken zou hebben gestaan.
Hier is een voorbeeld om dit aan te tonen:
SELECT
TO_CHAR(-7, '000') AS "Minus Sign",
TO_CHAR(7, '000') AS "Padded",
TO_CHAR(7, 'fm000') AS "Not Padded";
Resultaat:
Minus Sign | Padded | Not Padded ------------+--------+------------ -007 | 007 | 007
De LPAD()
Functie
We kunnen ook de LPAD()
. gebruiken functie om nummers met voorloopnullen in te vullen:
SELECT LPAD('7', 3, '0');
Resultaat:
007
Nog een voorbeeld:
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";
Resultaat:
r1 | r2 | r3 | r4 | r5 ----+-------+-------+-------+------- 7 | 00077 | 00777 | 07777 | 77777
Merk op dat deze functie vereist dat het nummer als een string wordt doorgegeven. Daarom moeten we het getal eerst naar een tekenreeks converteren. Het opvulteken moet ook een tekenreeks zijn.
Dus misschien moeten we zoiets als dit doen:
SELECT LPAD(CAST(7 AS varchar), 3, '0');
Resultaat:
007
Een van de voordelen die LPAD()
heeft ten opzichte van de vorige methode, is dat we het resultaat van andere tekens kunnen voorvoegen - het hoeft geen voorloopnul te zijn.
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";
Resultaat:
r1 | r2 | r3 | r4 | r5 ----+-------+-------+-------+------- 7 | ...77 | ..777 | .7777 | 77777