Come si può selezionare una parte di una stringa escludendo alcuni caratteri?
Ad esempio se della parola “massimo” volessi selezionare solo “si” come posso farlo? E’ questo che mi sono chiesto oggi quando mi sono imbattuto in questa problematica durante una delle attività lavorative.
Ho fatto così un giro tra le stringhe di selezione del selettore di QGIS ed ho trovato quella che cercavo!
Il dato di partenza, in questo caso, è il vettore poligonale della Francia Europea.
Dalla tabella che segue mi interessa selezionare nella colonna “insee” solo quei poligoni il cui codice inizia per 51 e 10.
Ho attivato il selettore tramite espressione e cercando tra le espressioni presenti nella sezione “String” ho trovato quello che cercavo.
La query per raggiungere lo scopo è la seguente:
substr( "insee" , 1,2) is 51 or substr( "insee" , 1,2) is 10
in cui:
Nell’immagine precedente c’è il risultato della selezione, nell’immagine successiva c’è lo zoom all’area selezionata.
Come molti sapranno, nei software GIS le query SQL sono facilitate. Dietro l’interfaccia grafica di un “Query builder” o un “Select by expression” si cela la sintassi base SQL, quel select X from Y where Z che chi è avvezzo all’uso dei DB conosce bene.
Grazie alle indicazioni di Salvatore Fiandaca, che trovate tra i commenti di questo post, riporto di seguito la sintassi SQL completa applicabile in un qualunque DB:
select * from francia_europea
where
substr("insee",1,2) is '51' or substr("insee",1,2) is '10'
Queste tre righe sono così definite:
Traducendo la query di prima si è detto al pc di selezionare(select) tutti i campi(*) della tabella francia_europea(from) in cui è verificata la condizione substr(where).
La query completa eseguita in SpatiaLite, per esempio, ci restituisce la sola selezione dei record tabellari.
Per creare una tabella dalla selezione bisogna anteporre una stringa a quanto scritto in precedenza:
create table area_lavoro as
select * from francia_europea
where
substr("insee",1,2) is '51' or substr("insee",1,2) is '10'
Questo però non è sufficiente a creare anche le geometrie, infatti una volta creata la tabella area_lavoro, bisogna eseguire una nuova query per ottenere le geometrie che possono quindi essere visualizzate in QGIS:
SELECT RecoverGeometryColumn('area_lavoro', 'geom',3857, 'MULTIPOLYGON', 'XY')
Spero che l’articolo possa tornare utile a qualcun altro oltre che a me 🙂
Ecco il video tutorial
Info sull'autore