När vi använder Oracle Database för att formatera ett tal så att det har inledande nollor, måste vi konvertera det till en sträng och formatera det därefter.
Du kan använda TO_CHAR(number)
funktion för att formatera tal med inledande nollor.
Och kanske ett mindre känt faktum är att du också kan använda LPAD()
funktion för att fylla ett tal med inledande nollor.
TO_CHAR()
Funktion
När du använder TO_CHAR(number)
funktionen, använd 0
formatelement för att inkludera inledande och/eller avslutande nollor.
Exempel:
SELECT TO_CHAR(7, 'fm000')
FROM DUAL;
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"
FROM DUAL;
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"
FROM DUAL;
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"
FROM DUAL;
Resultat:
Minus Sign Padded Not Padded _____________ _________ _____________ -007 007 007
LPAD()
Funktion
Vi kan alternativt använda LPAD()
funktion för att formatera tal med inledande nollor.
Exempel:
SELECT LPAD(7, 3, '0')
FROM DUAL;
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"
FROM DUAL;
Resultat:
r1 r2 r3 r4 r5 _____ ________ ________ ________ ________ 7 00077 00777 07777 77777
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"
FROM DUAL;
Resultat:
r1 r2 r3 r4 r5 _____ ________ ________ ________ ________ 7 ...77 ..777 .7777 77777