PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

2 modi per aggiungere zeri iniziali in PostgreSQL

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