SQL – Modifica di una sola parte di un campo.

Ah, l’SQL, che invenzione!

Diciamo pure che, per noi programmatori, è una manna dal cielo. Ci semplifica la vita nella stragrande maggioranza dei casi nei quali dobbiamo modificare dei dati su un file di database.

Facciamo un esempio pratico per capire la sua potenza e la sua semplicità:

Supponiamo di avere un File di Database contenente l’elenco di tutti cittadini di Italia, con i relativi dati di residenza.

Un bel file con più di sessanta milioni di record. Insomma, non proprio briciole.

Poi che succede?

Un bel giorno, al governo si svegliano e decidono che le province italiane sono troppo poche e ne servono di più, e così dalla provincia di Milano se ne creano altre due:

  • Lodi (LO)
  • Monza Brianza (MB).

Ecco che la nostra anagrafica ora è sbagliata perché alcuni comuni della provincia di Milano devono cambiare sia provincia che codice di avviamento postale.

Prendiamo ad esempio “Ceriano Laghetto” un piccolo comune a nord di Milano ai cui abitanti deve essere cambiata sia la provincia di residenza, che cambia da “MI” a “MB”, sia il CAP che passa da “20020” a “20816”.

Se non ci fosse l’SQL dovremmo metterci di buona lena a scrivere un programma che si spazzola uno per uno tutti i record del nostro database, che faccia un test sul comune e quando trova “Ceriano Laghetto” imposti i nuovi CAP e Provincia.

Un po’ lunga la faccenda

Ma siccome l’SQL c’è, ecco che possiamo utilizzare la sua operazione UPDATE per fare ciò che ci serve.

Ci basterà quindi scrivere questa semplice istruzione:

UPDATE DBINDIRIZZI SET PROVINCIA = “MB”, CAP = “20816” WHERE COMUNE = “Ceriano Laghetto” 

In men che non si dica, Ceriano Laghetto passa da Milano a Monza Brianza.

Fantastico vero?!

Fin qui tutto abbastanza semplice, ma diciamo che vogliamo complicarla un po’.

Supponiamo che chi aveva creato il Database DBINDIRIZZI si era dimenticato di creare il campo della Provincia e, per questo, avesse poi deciso di aggiungere la provincia nello stesso campo del comune, allineandola tutta a destra.

Diciamo quindi che il campo Comune è lungo 50 bytes di cui le prime 48 appartengono al comune e le ultime 2 alla provincia.

In questo caso, l’istruzione SQL sopra non funzionerebbe più perché in questo caso non dovremmo cambiare un campo intero ma solo una sua parte, quella cioè che va dalla posizione 49 alla posizione 50.

Per fortuna, l’SQL prevede anche i capricci di programmatori pigri e ci da la possibilità di sostituire solo una parte di un campo che vogliamo modificare, o meglio, ci da la possibilità di attribuire ad un intero campo un valore uguale ad una parte di sè stesso più una parte indicata da noi.

Si lo so, si capisce poco ma vediamolo con un esempio così ci capiamo meglio.

Adattiamo l’istruzione sopra alla nostra nuova esigenza:

UPDATE DBINDIRIZZI  SET COMUNE = SUBSTR(COMUNE, 1, 48) !! “MB”,  CAP = “20816” WHERE SUBSTR(COMUNE, 1, 48) = “Ceriano Laghetto” 

Cosa abbiamo fatto in pratica?

Abbiamo attribuito all’intero valore del campo COMUNE i suoi primi 48 bytes più la costante MB.

Per fare questo abbiamo usato dei caratteri di concatenazione. L’SQL, per tale scopo, prevede l’utilizzo del doppio punto esclamativo (!!) o, in alcuni casi, del doppio pipe (||).

Ecco che, anche in questo caso, con una sola istruzione, un pochino più complicata, otteniamo lo stesso risultato…….e alla faccia del programmatore pigro, anche in questo caso, Ceriano Laghetto è diventato un comune di Monza e Brianza.

 

Davide.

NB: Attenzione! Sostituire i punti esclamativi (!!) con i pipe (||) in caso non funzioni.

Davide Galloni

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Next Post

Apocalypse Maciachini

Lun Feb 29 , 2016
Ci sono posti che non sanno di nulla, posti che nessuno vorrebbe frequentare, posti nei quali devi starci per forza e non vedi l’ora di lasciare ma questi posti, questi stessi lungi, in qualche occasione riescono ad essere addirittura suggestivi Share on Social Media twitter facebook linkedin tumblr email
Gennaio: 2016
L M M G V S D
 123
45678910
11121314151617
18192021222324
25262728293031

Archivi

Categorie

%d blogger hanno fatto clic su Mi Piace per questo: