Ho importato un file CSV in Postgresql in cui i testi erano racchiusi tra doppio apice (“).
Il risultato si traduce in campi (quelli testuali) tutti belli incapsulati in doppie apici che, a dirla tutta, non sono il massimo…soprattuto se si devono fare SELECT o UPDATE via psql (client a riga di comando comodissimo e potente). Ho tentato allora di approfondire cercando una soluzione (in Postgresql) che permettesse di fare un bel FIND AND REPLACE (come siamo soliti fare con openoffice/libreoffice e/o qualsiasi altro editor di testo).
Alla fine ho scovato la funzione REPLACE di Postgresql che ha la seguente sintassi:
replace(string text, from text,to text)
che riportata in concreto diventa:
nome_db =# UPDATE nome_tabella SET nome_campo=replace(nome_campo, ‘valore_vecchio’,’valore_nuovo’);
Vediamo nel caso pratico del mio db. Si tratta di una tabella contente dati relativi a ditte. Facendo una SELECT sul campo “denominazione” prima della modifica con REPLACE si otteneva:
nome_db =# SELECT denominazione FROM ditte WHERE numero=2;
denominazione
—————–
“NOME DITTA A CASO s.n.c.”
(1 riga)
Aggiorniamo il campo denominazione togliendo i doppi apici:
nome_db =# UPDATE ditte SET denominazione=replace(denominazione,'”‘,”);
e alla fine la query di SELECT precedente torna il valore “pulito”:
nome_db =# SELECT denominazione FROM ditte WHERE numero=2;
denominazione
—————–
NOME DITTA A CASO s.n.c.
(1 riga)
Altro esempio: supponiamo di avere un campo che memorizza il percorso di salvataggio di una immagine. Il campo si chiama “foto” e dobiamo aggiornare l’indirizzo IP del server sul quale risiedono le immagini: si passa da server con IP “100.0.4.231” a IP”192.168.4.50″.
Se interroghiamo il DB prima dell’aggiornamento otteniamo:
nome_db =# SELECT foto FROM ditte WHERE numero=2;
foto
—————–
http://100.0.4.231/percorso_al_file_immagine/002.jpg
(1 riga)
Modifichiamo allora solo la parte di campo relativa all’indirizzo IP:
nome_db =# UPDATE ditte SET foto=replace(foto,’100.0.4.231,’192.168.4.50′) WHERE numero=;
UPDATE 1
ed il risultato della SELECT sarà:
nome_db =# SELECT foto FROM ditte WHERE numero=2;
foto
—————–
http://192.168.4.50/percorso_al_file_immagine/002.jpg
(1 riga)
Ok, per esperienza, quando metti le mani sulle anagrafiche potresti trovare di tutto, tra cui stringhe che hanno i doppi apici al centro.
Se devi rimuovere solo i caraterri a inizio fine stringa dovrebbe andare bene anche
che rimuove uno o più caratteri (di default gli spazi)
Thanks for contribtuing. It’s helped me understand the issues.