Когато използваме Oracle Database за форматиране на число, така че да има водещи нули, трябва да го преобразуваме в низ и да го форматираме съответно.
Можете да използвате TO_CHAR(number)
функция за форматиране на числа с водещи нули.
И може би по-малко известен факт е, че можете да използвате и LPAD()
функция за допълване на число с водещи нули.
TO_CHAR()
Функция
Когато използвате TO_CHAR(number)
функция, използвайте 0
форматен елемент, за да включва начални и/или крайни нули.
Пример:
SELECT TO_CHAR(7, 'fm000')
FROM DUAL;
Резултат:
007
Ето го в сравнение с 9
форматен елемент:
SELECT
TO_CHAR(7, 'fm999') AS "9",
TO_CHAR(7, 'fm000') AS "0"
FROM DUAL;
Резултат:
9 0 ____ ______ 7 007
Броят на водещите нули се определя от броя на 0
форматни елементи и броя на цифрите в числото:
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;
Резултат:
r1 r2 r3 r4 r5 _____ ________ ________ ________ ________ ## 00077 00777 07777 77777
fm
модификаторът на формат потиска всички водещи и/или крайни запълвания, които могат да бъдат включени в резултата. Например, когато числото е отрицателно, се поставя знак минус. Но когато числото е положително, не се включва знак и се появява интервал, където би бил знакът плюс.
Ето пример за демонстриране на това:
SELECT
TO_CHAR(-7, '000') AS "Minus Sign",
TO_CHAR(7, '000') AS "Padded",
TO_CHAR(7, 'fm000') AS "Not Padded"
FROM DUAL;
Резултат:
Minus Sign Padded Not Padded _____________ _________ _____________ -007 007 007
LPAD()
Функция
Като алтернатива можем да използваме LPAD()
функция за форматиране на числа с водещи нули.
Пример:
SELECT LPAD(7, 3, '0')
FROM DUAL;
Резултат:
007
Друг пример:
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;
Резултат:
r1 r2 r3 r4 r5 _____ ________ ________ ________ ________ 7 00077 00777 07777 77777
Едно от предимствата на LPAD()
има над предишния метод е, че можем да поставим пред резултата други знаци – не е необходимо да е водеща нула.
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;
Резултат:
r1 r2 r3 r4 r5 _____ ________ ________ ________ ________ 7 ...77 ..777 .7777 77777