MySQL SUBSTRING() spiegato: estrarre parti di una stringa con esempi

1. Che cos’è la funzione SUBSTRING?

La funzione SUBSTRING è una funzione importante di MySQL usata per estrarre una sottostringa da una stringa. Con questa funzione è possibile prelevare solo la parte necessaria dai dati memorizzati in un database. Per esempio, è utile quando si vuole estrarre la parte del dominio dall’indirizzo email di un utente, o recuperare una sezione specifica da un codice prodotto.

1.1 Sintassi di base

La sintassi di base della funzione SUBSTRING è la seguente:

SUBSTRING(str, pos)
SUBSTRING(str, pos, len)
  • str : La stringa da cui estrarre.
  • pos : La posizione di partenza (parte da 1).
  • len : Il numero di caratteri da estrarre (opzionale).

Se pos è un valore positivo, MySQL conta in avanti dall’inizio della stringa. Se è negativo, MySQL conta all’indietro dalla fine della stringa. Se len è omesso, MySQL estrae dalla posizione specificata fino alla fine della stringa.

1.2 Casi d’uso della funzione SUBSTRING

Questa funzione è usata per formattare i dati stringa ed estrarre parti specifiche, rendendo più semplice la ricerca e l’elaborazione delle informazioni in modo efficiente all’interno di un database.

2. Utilizzo di base della funzione SUBSTRING

Per comprendere le basi, diamo un’occhiata ad alcuni esempi semplici.

2.1 Estrarre una parte di una stringa

La query seguente estrae 6 caratteri a partire dal terzo carattere della stringa “Hello, World!”.

SELECT SUBSTRING('Hello, World!', 3, 6);

Il risultato è "llo, W". Poiché pos è 3, l’estrazione inizia dal terzo carattere, e poiché len è 6, vengono estratti 6 caratteri.

2.2 Omettere il parametro len

Se ometti len, MySQL estrae dalla posizione specificata fino alla fine della stringa.

SELECT SUBSTRING('Hello, World!', 8);

Il risultato è "World!", che recupera tutto dall’ottavo carattere fino alla fine.

2.3 Usare una posizione negativa

Se usi un valore negativo, puoi specificare la posizione a partire dalla fine della stringa.

SELECT SUBSTRING('Hello, World!', -5);

Questa query restituisce "orld!", estraendo gli ultimi 5 caratteri.

3. Applicazioni pratiche della funzione SUBSTRING

La funzione SUBSTRING è frequentemente usata nelle operazioni di dati reali. Ecco alcuni esempi pratici.

3.1 Estrarre il dominio da un indirizzo email

Combinando SUBSTRING con LOCATE, è possibile estrarre la parte del dominio da un indirizzo email.

SELECT email, SUBSTRING(email, LOCATE('@', email) + 1) AS domain FROM users;

Questa query estrae la stringa dopo “@” e restituisce solo la parte del dominio.

3.2 Estrarre una parte di un codice prodotto

Questo esempio estrae una sezione specifica di un codice prodotto.

SELECT product_code, SUBSTRING(product_code, 5, 4) AS product_id FROM products;

In questa query, 4 caratteri a partire dal quinto carattere del codice prodotto vengono estratti e visualizzati come una nuova colonna chiamata product_id.

3.3 Usarla in una sottoquery

Combinandola con una sottoquery, è possibile estrarre dati in condizioni più complesse.

SELECT id, SUBSTRING(description, 1, 10) AS short_desc FROM (SELECT * FROM products WHERE category = 'Electronics') AS sub;

Questa query estrae i primi 10 caratteri di description dai prodotti dove category è ‘Electronics’.

4. Confronto con altre funzioni stringa

Altre funzioni che possono essere usate per scopi simili a SUBSTRING includono LEFT, RIGHT e SUBSTR.

4.1 Funzioni LEFT e RIGHT

  • LEFT(str, len) : Recupera il numero specificato di caratteri dall’inizio della stringa.
  • RIGHT(str, len) : Recupera il numero specificato di caratteri dalla fine della stringa.
    SELECT LEFT('Hello, World!', 5);  -- "Hello"
    SELECT RIGHT('Hello, World!', 6); -- "World!"
    

Queste funzioni sono comode quando vuoi estrarre una sottostringa dall’inizio o dalla fine di una stringa.

4.2 Funzione SUBSTR

SUBSTR è un alias di SUBSTRING, quindi può essere usato allo stesso modo.

SELECT SUBSTR('Hello, World!', 8); -- "World!"

Questa query restituisce "World!", proprio come SUBSTRING.

5. Utilizzo Avanzato e Ottimizzazione per la Funzione SUBSTRING

Questa sezione spiega un utilizzo più avanzato e le tecniche di ottimizzazione.

5.1 Ottimizzazione delle Prestazioni

L’uso di SUBSTRING su grandi set di dati può influire sulle prestazioni. Se necessario, crea indici e controlla il piano di esecuzione della query. Inoltre, se estrai frequentemente la stessa sottostringa, considera di memorizzarne il risultato nella cache.

5.2 Utilizzarlo in una Clausola WHERE

Puoi usare SUBSTRING in una clausola WHERE per filtrare i record in base a una condizione di sottostringa.

SELECT * FROM products WHERE SUBSTRING(product_code, 1, 3) = 'ABC';

Questa query cerca i prodotti in cui i primi 3 caratteri di product_code sono ‘ABC’.

6. Esempi e Buone Pratiche per la Funzione SUBSTRING

Ecco esempi pratici di utilizzo di SUBSTRING e buone pratiche per il lavoro reale.

6.1 Codice di Esempio

Il seguente esempio divide il nome completo di un cliente in nome e cognome.

SELECT name, SUBSTRING(name, 1, LOCATE(' ', name) - 1) AS first_name,
       SUBSTRING(name, LOCATE(' ', name) + 1) AS last_name
FROM customers;

In questa query, nome e cognome vengono estratti da un nome completo separato da uno spazio.

6.2 Buone Pratiche

  • Estrai solo ciò di cui hai bisogno : Mantieni la lunghezza della sottostringa il più piccola possibile per ridurre l’impatto sulle prestazioni.
  • Fai attenzione ai tipi di dato : Se applichi SUBSTRING a dati numerici, potresti doverli convertire esplicitamente in stringa.
  • Considera l’uso degli indici : Quando usi SUBSTRING in una clausola WHERE, gli indici potrebbero non essere utilizzati efficacemente, quindi controlla attentamente le prestazioni della query.

7. Gestione degli Errori e Differenze tra Versioni

Questa sezione tratta la gestione degli errori quando si utilizza SUBSTRING e le differenze tra le versioni di MySQL.

7.1 Gestione degli Errori

Se la posizione specificata è al di fuori dell’intervallo della stringa, SUBSTRING restituisce una stringa vuota. Poiché non è un errore, è consigliabile aggiungere una logica per convalidare il risultato in anticipo, se necessario.

7.2 Differenze tra Versioni

A seconda della versione di MySQL, il comportamento della funzione SUBSTRING può variare. Ad esempio, alcune versioni più vecchie potrebbero gestire i caratteri multibyte in modo diverso. Verifica la compatibilità tra le versioni e applica le misure appropriate quando necessario.