mercoledì 23 aprile 2008

Inserire dei padding nei campi di testo

PostgreSQL mette a disposizione una funzione molto comoda, lpad, che consente data una stringa e una lunghezza cui questa deve essere formattata, di tagliare (o allungare) la stringa inserendo un eventuale padding specificato. Questo è molto utile quando si vuole uniformare la lunghezza di alcuni codici che sono stati inseriti in modo eterogeneo. Ad esempio, avendo una serie di codici come:

cod01
08cod02

e volendo uniformare il tutto affinché i due codici abbiano il prefisso 08 e siano della stessa lunghezza, è possibile utilizzare lpad specificando come padding '08' e la lunghezza di 7 caratteri:

lpad('cod01', 7, '08') = 08cod01


A questo punto, ipotizzando di avere una tabella padding che contiene la lunghezza con cui uniformare i codici, e quindi di voler prendere da questa tabella la lunghezza dei codici si può usare un semplice comando (da utilizzare eventualmente in transazione). Ad esempio avendo il padding e la tabella delle stringhe da modificare come segue:

luca=# select * from padding;
tipo | lunghezza
------+-----------
1 | 10
2 | 20
3 | 30
(3 rows)

luca=# select * from stringhe;
stringa_src | stringa_dest
-------------+--------------
Luca |
ciao |
(2 rows)


è possibile dare il seguente update per inserire il padding nelle stringhe:

luca=# update stringhe set stringa_dest =
lpad( stringa_src, (select lunghezza from padding where tipo=2), '0')
where stringa_src = 'ciao';

UPDATE 1
luca=# select * from stringhe;
stringa_src | stringa_dest
-------------+----------------------
Luca |
ciao | 0000000000000000ciao
(2 rows)

Come si può notare è stato inserito un padding di 10 caratteri 0 (10 è stato selezionato dal tipo di padding 1) nella stringa ciao.



Nessun commento: