W PostgreSQL możemy użyć TO_CHAR()
funkcja dodawania wiodących zer do liczby. Funkcja konwertuje liczbę na ciąg znaków, używając (opcjonalnego) określonego przez nas formatu.
Inną opcją jest użycie LPAD()
funkcja dopełniania liczby wiodącymi zerami.
TO_CHAR()
Funkcja
Używając TO_CHAR()
funkcji, użyj 0
element formatu zawierający początkowe i/lub końcowe zera.
Przykład:
SELECT TO_CHAR(7, 'fm000');
Wynik:
007
Oto porównanie z 9
element formatu:
SELECT
TO_CHAR(7, 'fm999') AS "9",
TO_CHAR(7, 'fm000') AS "0";
Wynik:
9 | 0 ---+----- 7 | 007
Liczba zer wiodących jest określona przez liczbę 0
elementy formatu i ilość cyfr w liczbie:
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";
Wynik:
r1 | r2 | r3 | r4 | r5 ----+-------+-------+-------+------- # | 00077 | 00777 | 07777 | 77777
fm
modyfikator formatu pomija wszelkie początkowe i/lub końcowe dopełnienie, które może zostać uwzględnione w wyniku. Na przykład, gdy liczba jest ujemna, przedrostkiem jest znak minus. Ale gdy liczba jest dodatnia, nie uwzględnia się żadnego znaku i pojawia się spacja w miejscu, w którym znajdowałby się znak plus.
Oto przykład, który to zademonstruje:
SELECT
TO_CHAR(-7, '000') AS "Minus Sign",
TO_CHAR(7, '000') AS "Padded",
TO_CHAR(7, 'fm000') AS "Not Padded";
Wynik:
Minus Sign | Padded | Not Padded ------------+--------+------------ -007 | 007 | 007
LPAD()
Funkcja
Alternatywnie możemy użyć LPAD()
funkcja dopełniania liczb wiodącymi zerami:
SELECT LPAD('7', 3, '0');
Wynik:
007
Inny przykład:
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";
Wynik:
r1 | r2 | r3 | r4 | r5 ----+-------+-------+-------+------- 7 | 00077 | 00777 | 07777 | 77777
Zauważ, że ta funkcja wymaga, aby liczba była przekazywana jako ciąg. Dlatego najpierw musimy przekonwertować liczbę na łańcuch. Znak dopełniający również musi być ciągiem.
Być może będziemy musieli zrobić coś takiego:
SELECT LPAD(CAST(7 AS varchar), 3, '0');
Wynik:
007
Jedna z zalet LPAD()
ma nad poprzednią metodą jest to, że możemy poprzedzić wynik innymi znakami – nie musi to być wiodące zero.
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";
Wynik:
r1 | r2 | r3 | r4 | r5 ----+-------+-------+-------+------- 7 | ...77 | ..777 | .7777 | 77777