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

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'

Pubblicitร 

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ร