Funzioni sulle stringhe in SQL

Nelle lezioni precedenti abbiamo lavorato principalmente con i valori così come sono memorizzati nelle tabelle. SQL, però, permette anche di elaborare i valori testuali direttamente all'interno delle query. MySQL mette a disposizione diverse funzioni per unire, modificare, analizzare e sostituire parti di una stringa.

In questa lezione vedremo le principali funzioni per lavorare con le stringhe:

FunzioneDescrizione
CONCAT() Unisce più stringhe.
CONCAT_WS() Unisce più stringhe utilizzando un separatore.
UPPER() Converte una stringa in maiuscolo.
LOWER() Converte una stringa in minuscolo.
LENGTH() Restituisce la lunghezza in byte.
CHAR_LENGTH() Restituisce il numero di caratteri.
SUBSTRING() Estrae una parte di una stringa.
TRIM() Rimuove gli spazi iniziali e finali.
REPLACE() Sostituisce una parte di una stringa.

Vediamo le funzioni delle stringhe in dettaglio.

Funzione CONCAT()

La funzione CONCAT() permette di unire più stringhe in un unico valore.

Per esempio, supponiamo di avere una tabella utenti con le colonne nome e cognome. Possiamo unirle in questo modo:

SELECT CONCAT(nome, cognome)
FROM utenti;

Se un utente ha Andrea come nome e Rossi come cognome, il risultato sarà AndreaRossi.

Possiamo quindi inserire uno spazio tra i due valori:

SELECT CONCAT(nome, ' ', cognome)
FROM utenti;

Possiamo anche utilizzare AS (che abbiamo visto nella lezione di SELECT) per assegnare un nome alla colonna risultante:

SELECT CONCAT(nome, ' ', cognome) AS nome_completo
FROM utenti;

Nota: in MySQL, se uno degli argomenti passati a CONCAT() è NULL, il risultato della funzione sarà NULL.

Funzione CONCAT_WS()

CONCAT_WS() significa "Concatenate With Separator" (in italiano, "unisci con separatore") e permette di unire più stringhe utilizzando un separatore specificato come primo argomento.

Ad esempio, se vogliamo usare lo spazio come separatore, possiamo scrivere:

SELECT CONCAT_WS(' ', nome, cognome) AS nome_completo
FROM utenti;

Puoi utilizzare qualsiasi separatore a scelta. Ad esempio, possiamo anche utilizzare il separatore -:

SELECT CONCAT_WS(' - ', nome, cognome, citta) AS informazioni
FROM utenti;

Funzione UPPER()

La funzione UPPER() converte una stringa in lettere maiuscole.

Ad esempio, per convertire il nome in lettere maiuscole (ad esempio, da "Andrea" a "ANDREA"):

SELECT UPPER(nome) AS nome_maiuscolo
FROM utenti;

Ricorda che la funzione non modifica il valore originale nella tabella: agisce soltanto sul valore restituito dalla query.

Funzione LOWER()

LOWER() svolge l'operazione opposta a UPPER(): converte una stringa in lettere minuscole.

Ad esempio, per convertire il nome in lettere minuscole (ad esempio, da "Andrea" a "andrea"):

SELECT LOWER(nome) AS nome_minuscolo
FROM utenti;

Funzione LENGTH()

La funzione LENGTH() restituisce la lunghezza di una stringa in byte.

Ad esempio, per sapere la lunghezza in byte dei nomi degli utenti, puoi usare la query:

SELECT nome, LENGTH(nome) AS lunghezza
FROM utenti;

Nota: la lunghezza espressa in byte non corrisponde necessariamente al numero di caratteri di una stringa. Nella codifica UTF-8, infatti, alcuni caratteri possono occupare più di un byte. Ad esempio, LENGTH('è') restituisce 2, perché il carattere è occupa 2 byte, anche se è composto da un solo carattere.

Funzione CHAR_LENGTH()

CHAR_LENGTH() restituisce il numero di caratteri contenuti in una stringa, indipendentemente dal numero di byte utilizzati per rappresentarli.

Ad esempio, per sapere la lunghezza dei nomi degli utenti, si può scrivere:

SELECT nome, CHAR_LENGTH(nome) AS lunghezza
FROM utenti;

Funzione SUBSTRING()

La funzione SUBSTRING() permette di estrarre una parte di una stringa.

La sintassi è: SUBSTRING(stringa, inizio, lunghezza), dove inizio indica la posizione da cui iniziare, mentre lunghezza indica il numero di caratteri da estrarre a partire da inizio.

Ad esempio, per estrarre le prime 3 lettere di ogni nome:

SELECT SUBSTRING(nome, 1, 3) AS abbreviazione
FROM utenti;

Possiamo anche omettere la lunghezza per estrarre tutti i caratteri a partire dalla posizione di inizio indicata.

Funzione TRIM()

La funzione TRIM() permette di rimuovere gli spazi all'inizio e alla fine di una stringa.

Ad esempio, per rimuovere gli spazi all'inizio e alla fine dei nomi degli utenti:

SELECT TRIM(nome) AS nome_pulito
FROM utenti;

TRIM() può essere particolarmente utile quando i dati provengono da input degli utenti o da altre fonti e potrebbero contenere accidentalmente spazi aggiuntivi. TRIM() non toglie gli spazi all'interno della stringa.

Funzione REPLACE()

La funzione REPLACE() permette di sostituire una parte di una stringa con un'altra.

La sintassi è: REPLACE(stringa, valore_da_cercare, nuovo_valore).

Per esempio, se vogliamo che ogni occorrenza di Marco presente nel valore della colonna nome venga sostituita con Luca nel risultato, possiamo scrivere:

SELECT REPLACE(nome, 'Marco', 'Luca') AS nuovo_nome
FROM utenti;

Prova!Completa gli spazi vuoti con il testo appropriato.
-- Unisci nome e cognome divisi da uno spazio
SELECT (nome, ' ', cognome)
FROM utenti;

Prova! Scegli l'opzione corretta tra quelle elencate.
-- Restituisci la lunghezza dei cognomi
SELECT ___________(cognome)
FROM utenti;