In PostgreSQL, possiamo usare TO_CHAR()
funzione per aggiungere zeri iniziali a un numero. La funzione converte il numero in una stringa, utilizzando il formato (opzionale) da noi specificato.
Un'altra opzione è usare LPAD()
funzione per riempire un numero con zeri iniziali.
Il TO_CHAR()
Funzione
Quando si utilizza TO_CHAR()
funzione, utilizzare il 0
format per includere zeri iniziali e/o finali.
Esempio:
SELECT TO_CHAR(7, 'fm000');
Risultato:
007
Eccolo se confrontato con il 9
elemento di formato:
SELECT
TO_CHAR(7, 'fm999') AS "9",
TO_CHAR(7, 'fm000') AS "0";
Risultato:
9 | 0 ---+----- 7 | 007
Il numero di zeri iniziali è determinato dal numero di 0
elementi di formato e il numero di cifre nel numero:
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";
Risultato:
r1 | r2 | r3 | r4 | r5 ----+-------+-------+-------+------- # | 00077 | 00777 | 07777 | 77777
Il fm
il modificatore di formato sopprime qualsiasi riempimento iniziale e/o finale che potrebbe essere incluso nel risultato. Ad esempio, quando il numero è negativo, viene preceduto un segno meno. Ma quando il numero è positivo, non viene incluso alcun segno e appare uno spazio dove sarebbe stato il segno più.
Ecco un esempio per dimostrarlo:
SELECT
TO_CHAR(-7, '000') AS "Minus Sign",
TO_CHAR(7, '000') AS "Padded",
TO_CHAR(7, 'fm000') AS "Not Padded";
Risultato:
Minus Sign | Padded | Not Padded ------------+--------+------------ -007 | 007 | 007
Il LPAD()
Funzione
In alternativa possiamo usare il LPAD()
funzione per riempire i numeri con zeri iniziali:
SELECT LPAD('7', 3, '0');
Risultato:
007
Un altro esempio:
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";
Risultato:
r1 | r2 | r3 | r4 | r5 ----+-------+-------+-------+------- 7 | 00077 | 00777 | 07777 | 77777
Si noti che questa funzione richiede che il numero venga passato come stringa. Pertanto, dobbiamo prima convertire il numero in una stringa. Anche il carattere di riempimento deve essere una stringa.
Quindi potremmo dover fare qualcosa del genere:
SELECT LPAD(CAST(7 AS varchar), 3, '0');
Risultato:
007
Uno dei vantaggi che LPAD()
rispetto al metodo precedente è che possiamo anteporre al risultato altri caratteri:non è necessario che sia uno zero iniziale.
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";
Risultato:
r1 | r2 | r3 | r4 | r5 ----+-------+-------+-------+------- 7 | ...77 | ..777 | .7777 | 77777