back to top

Elaborare stringhe con SQL Server

Una stringa, in informatica, รจ un insieme di caratteri alfanumerici. Puรฒ rappresentare ad esempio un nome, un indirizzo, un numero di telefono o ancora molti altri tipi di dato. Si tratta quindi di un tipo di dato estremamente flessibile grazie al quale archiviare la piรน ampia varietร  dโ€™informazioni.

Questo tipo di dato, ovviamente, รจ diffusamente utilizzato allโ€™interno di database. Proprio a sottolineare lโ€™importanza di questa tipologia di dato, notiamo come uno tra i piรน popolari programmi di gestione database (DBMS, DataBase Management System) cioรจ Microsoft SQL Server metta a disposizione una serie di funzioni specificamente dedicate a trattare dati di tipo stringa (detti anche insiemi di caratteri di lunghezza variabile, o varchar):

  • LEN
  • LOWER/UPPER
  • LTRIM/RTRIM
  • ASCII
  • CHAR
  • NCHAR
  • UNICODE
  • STR
  • CHARINDEX
  • PATINDEX
  • SOUNDEX
  • DIFFERENCE
  • LEFT/RIGHT
  • QUOTENAME
  • REPLACE
  • REPLICATE
  • REVERSE
  • SPACE
  • STUFF
  • SUBSTRING
La funzione LEN

Pubblicitร 

Usiamo la funzione LEN per conoscere la lunghezza della stringa passata come parametro, compresi gli spazi. Cosรฌ, ad esempio, lโ€™esecuzione di:

SELECT LEN('Stringa di prova')
ha come risultato 16.

Le funzioni LOWER e UPPER

Possiamo servirci delle funzioni LOWER e UPPER per la gestione delle minuscole e delle maiuscole. Entrambe accettano una stringa come unico parametro in ingresso.

La funzione LOWER restituisce una stringa uguale a quella passata, ma in cui le lettere maiuscole sono sostituite dalle corrispondenti minuscole, mentre la funzione UPPER effettua il processo inverso, trasformando le minuscole in maiuscole. Cosรฌ, ad esempio, eseguendo le funzioni:

SELECT LOWER('Stringa di prova')
SELECT UPPER('Stringa di prova')
i risultati sono, rispettivamente:
'stringa di prova'
'STRINGA DI PROVA'
Le funzioni LTRIM e RTRIM

Le funzioni LTRIM e RTRIM hanno come scopo di eliminare gli spazi allโ€™inizio (LTRIM) o alla fine (RTRIM) della stringa passata come parametro. Immaginiamo di dichiarare in questo modo una variabile doc di tipo varchar:

DECLARE @doc varchar(64)
SELECT @doc='    Frase con spazi    '
Applichiamo ora le funzioni LTRIM e RTRIM alla variabile doc:
SELECT LTRIM(@doc)
SELECT RTRIM(@doc)
I risultati sono:
'Frase con spazi    '
'    Frase con spazi'

La funzione ASCII

La codifica ASCII associa ad uno specifico carattere un numero intero. Tramite la funzione ASCII รจ possibile sapere quale sia il valore ASCII associato al primo carattere allโ€™interno di una stringa (anchโ€™essa passata come parametro). Ad esempio lโ€™utilizzo della funzione:

SELECT ASCII ('esecuzionediprova')
avrebbe come risultato 101, che corrisponde infatti alla codifica ASCII del carattere โ€˜eโ€™.

La funzione CHAR

La funzione CHAR consente invece il passaggio inverso rispetto a quello appena illustrato per la funzione ASCII: tramite tale funzione infatti, il numero che rappresenta la codifica ASCII di un carattere puรฒ essere convertito nel carattere stesso. Cosรฌ lโ€™esecuzione di:

SELECT CHAR ('101')
ha come risultato โ€˜eโ€™. Queste due funzioni garantiscono quindi la possibilitร  di trattare dati di tipo char e insiemi di dati di tipo char (quindi stringhe) anche come numeri interi e insiemi di numeri interi, con la piena possibilitร  di convertire le informazioni da un tipo di dato allโ€™altro, secondo lโ€™occorrenza.

La funzione NCHAR

Anche la funzione NCHAR, cosรฌ come ASCII e CHAR, consente di stabilire una corrispondenza tra caratteri e numeri interi. La funzione NCHAR perรฒ, a differenza delle precedenti, si serve della codifica Unicode, piรน complessa e completa rispetto alla codifica ASCII.

Tramite la funzione NCHAR รจ possibile individuare il carattere associato al numero Unicode (compreso tra 0 e 65535, mentre la codifica ASCII spazia solo da 0 a 255, garantendo dunque un minor numero di simboli rappresentabili) passato come parametro. Ad esempio:

SELECT NCHAR(248)
ha come risultato โ€˜รธโ€™.

La funzione UNICODE

La funzione UNICODE consente il passaggio inverso rispetto a quello appena illustrato relativamente a NCHAR. La funzione ha come valore di ritorno la codifica Unicode corrispondente al primo carattere dellโ€™espressione fornita in input. Lโ€™esecuzione di:

SELECT UNICODE('ร…kergatan')
ha come risultato 197, che corrisponde infatti al simbolo ร….

La funzione STR

Anche la funzione STR si inserisce nellโ€™ambito delle conversioni tra dati di tipo numerico e dati di tipo stringa. In particolare, consente di convertire un numero (intero o con virgola) in una stringa che ne rappresenti il valore, specificando la lunghezza della stringa stessa. Ad esempio eseguiamo la funzione:

SELECT STR(148.81,5,1)
Tale funzione converte il numero 148.81 (primo parametro) in una stringa di 5 caratteri (secondo parametro) con una cifra decimale (terzo parametro, opzionale). Il risultato รจ infatti la stringa:
'148.8'
Se il numero di caratteri disponibili non รจ sufficiente, il valore di ritorno della funzione รจ โ€œ**โ€, per segnalare il problema.

La funzione CHARINDEX

Tramite CHARINDEX รจ possibile cercare una certa stringa allโ€™interno di unโ€™altra stringa. Immaginiamo ad esempio di dichiarare la variabile:

DECLARE @doc varchar(64)
SELECT @doc='Frase di prova'
A questo punto decidiamo di cercare lโ€™espressione โ€˜diโ€™ allโ€™interno della variabile doc appena dichiarata:
SELECT CHARINDEX('di', @doc)
Il valore di ritorno della funzione sarebbe in questo caso:
7
Ciรฒ significa che lโ€™espressione โ€˜diโ€™ si trova nella stringa doc e che comincia a partire dal settimo carattere. Si puรฒ anche passare alla funzione CHARINDEX un parametro opzionale, detto start_location, di tipo numero intero. Questo parametro consente di specificare da quale posizione della stringa in poi si desidera valutare la presenza o meno dellโ€™espressione cercata.

La funzione PATINDEX

Anche la funzione PATINDEX consente di individuare la posizione iniziale di una specifica serie di caratteri allโ€™interno di unโ€™espressione. A differenza di CHARINDEX perรฒ, le espressioni cercate possono contenere anche caratteri speciali, detti โ€œwildcard charactersโ€.

In particolare, รจ possibile servirsi del carattere โ€œ_โ€ (underscore) per indicare โ€œun qualsiasi carattereโ€. Cosรฌ per cercare unโ€™espressione di tipo โ€œrโ€ seguita da un carattere qualsiasi e poi da โ€œvโ€ allโ€™interno di doc (variabile che immaginiamo essere stata dichiarata cosรฌ come in CHARINDEX), si potrร  utilizzare la funzione:

SELECT PATINDEX('%r_v%', @doc)
I simboli โ€œ%โ€ sono necessari per questa funzione (a differenza di CHARINDEX) per delimitare gli estremi dellโ€™espressione da cercare. Qualora si omettesse il simbolo โ€œ%โ€ piรน a sinistra in โ€˜%r_v%โ€™ lโ€™espressione verrebbe trovata soltanto se corrispondente ai primi caratteri di doc. Se si omettesse invece il secondo simbolo โ€œ%โ€ verrebbero valutati solo gli ultimi caratteri. Il risultato della funzione appena presentata รจ:
11
La funzione SOUNDEX

Ci possiamo servire della funzione SOUNDEX per associare ad una stringa, passata come parametro, un codice di 4 caratteri. Come vedremo in seguito, trattando la funzione DIFFERENCE, tale codice puรฒ essere utilizzato, ad esempio, per valutare quanto due stringhe siano simili. Eseguendo, ad esempio, la funzione:

SELECT SOUNDEX('Ciao')
abbiamo come output il codice C000.

La funzione DIFFERENCE

DIFFERENCE consente di confrontare due stringhe fornendo una misura di โ€œsomiglianzaโ€ tra le stesse. In particolare viene rappresentata la differenza tra i valori delle funzioni SOUNDEX (giร  trattata in precedenza) associati alle stringhe.

La misura viene espressa con un numero intero: 4 rappresenta la massima somiglianza possibile, 1 la minima. Cosรฌ ad esempio il valore di ritorno della funzione:

SELECT DIFFERENCE('verde','verdi')
avrร  come risultato 4, mentre lโ€™esecuzione di:
SELECT DIFFERENCE('verde','blu')
porterร  ad un valore di ritorno di 1.

Le funzioni LEFT e RIGHT

Possiamo usare la funzione LEFT per estrarre la parte sinistra di una stringa, cosรฌ come la funzione RIGHT consente invece di estrarre una sottostringa destra. Oltre alla stringa di riferimento, รจ necessario passare alla funzione un altro parametro intero, che determina la dimensione della sottostringa da estrarre. Cosรฌ ad esempio il codice:

@decalre doc varchar(64)
SELECT @doc='Frase di prova'
SELECT LEFT(@doc,8)
SELECT RIGHT(@doc,4)
avrebbe come risultati:
'Frase di' (risultato della chiamata alla funzione LEFT)
'rova' (risultato della chiamata alla funzione RIGHT)
La funzione QUOTENAME

Possiamo servirci della funzione QUOTENAME per inserire su una stringa caratteri che ne delimitano in modo esplicito inizio e fine. Se non specificato diversamente (attraverso un parametro opzionale) il carattere di inizio stringa sarร  โ€˜[โ€˜ e quello di fine stringa โ€˜]โ€™. Cosรฌ ad esempio eseguendo:

SELECT QUOTENAME('abcde')
avremo come output
'[abcde]'
La funzione REPLACE

Con la funzione REPLACE รจ possibile sostituire tutte le occorrenze di una specifica espressione con unโ€™altra espressione (entrambe sono passate come parametro, cosรฌ come la stringa allโ€™interno della quale viene effettuata la ricerca). Per sostituire lโ€™espressione โ€˜perโ€™ con lโ€™espressione โ€˜conโ€™ in โ€˜Frase di prova per sostituzioniโ€™ possiamo usare la funzione:

SELECT REPLACE('Frase di prova per sostituzioni', 'per', 'con')
E la stringa sarร  trasformata in:
'Frase di prova con sostituzioni'
La funzione REPLICATE

La funzione REPLICATE consente di ripetere una certa espressione per uno specificato numero di volte. I due parametri in ingresso alla funzione sono dunque la stringa da ripetere e il numero intero di ripetizioni desiderate. Cosรฌ, ad esempio, per ripetere la stringa โ€œProvaโ€ per 100 volte, possiamo eseguire la funzione:

SELECT REPLICATE('Prova', 100)
La funzione REVERSE

Con la funzione REVERSE otteniamo, data in ingresso una stringa, quella stessa stringa letta da destra a sinistra. Ad esempio lโ€™esecuzione di:

SELECT REVERSE('Prova')
ha come risultato:
'avorP'
La funzione SPACE

La funzione SPACE ha come valore di ritorno una stringa costituita da uno specificato numero di spazi vuoti. Lโ€™unico parametro in ingresso rappresenta il numero di spazi vuoti desiderato. Per generare una stringa di 100 spazi vuoti รจ sufficiente usare la funzione:

SELECT SPACE(100)
La funzione STUFF

Posssiamo utilizzare la funzione STUFF per inserire unโ€™espressione composta da caratteri allโ€™interno di unโ€™altra espressione. I parametri da passare alla funzione sono 4: oltre ai due insiemi di caratteri infatti, vanno anche specificati, tramite due numeri interi, il punto in cui รจ necessario effettuare la sostituzione e quanti caratteri della stringa originale devono essere eliminati. Valutiamo un esempio di esecuzione della funzione STUFF:

SELECT STUFF('Prova', 2, 2, 'abcde')
Il risultato รจ:
'Pabcdeva'
La funzione SUBSTRING

La funzione SUBSTRING ha come valore di ritorno una sottostringa dellโ€™espressione passata come parametro. Devono essere forniti in input alla funzione anche due numeri interi che definiscono il primo carattere della sottostringa da estrarre e la sua lunghezza. Eseguiamo ad esempio la funzione:

SELECT SUBSTRING('Estrarre la sottostringa', 3, 9)
Il risultato sarร  allora:
'trarre la'

Altri contenuti interessanti

Pubblicitร 

Potrebbero interessarti queste guide

Leggi anche...

Come ottenere lโ€™ID dellโ€™ultimo record inserito in MySQL, PostgreSQL, SQL Server e Oracle?

Ottenere l'ID dell'ultimo record inserito in una tabella, dopo...

Database completo regioni, province e comuni italiani (in formato SQL)

Quando si sviluppa un sito web o un'applicazione in...

File CSV: cosa sono, come si aprono e come crearli

In questo articolo cercheremo di capire cos'รจ il formato...

Confrontare due tabelle e trovare i record senza corrispondenza

all'interno di un database relazionale puรฒ essere utile poter...

Eseguire comandi SQL online con SQL Fiddle

Sรฌ. E' possibile testare codice SQL senza aver installato...

SQL: Calcolare la media dei valori di piรน campi

Attraverso una semplice query SQL รจ possibile calcolare dinamicamente...
Pubblicitร