Problema:
Hai una colonna di stringhe e vorresti ottenere sottostringhe da esse.
Esempio 1:
Nelle emails
tabella, c'è una colonna di posta elettronica. Vorresti visualizzare i primi sette caratteri di ogni email.
La tabella si presenta così:
[email protected] |
[email protected] |
[email protected] |
[email protected] |
Soluzione 1:
SELECT email, SUBSTRING(email, 1, 7) AS substring FROM emails;
Il risultato è:
sottostringa | |
---|---|
[email protected] | jake99@ |
[email protected] | tamara |
[email protected] | nota@ |
[email protected] | Jessica |
Discussione:
Usa SUBSTRING()
funzione. Il primo argomento è la stringa o il nome della colonna. Il secondo argomento è l'indice del carattere in cui deve iniziare la sottostringa. Il terzo argomento è la lunghezza della sottostringa.
Attento! A differenza di altri linguaggi di programmazione, gli indici iniziano da 1 , non 0. Ciò significa che il primo carattere ha l'indice 1, il secondo carattere ha l'indice 2, ecc.
SUBSTRING(email, 1, 7)
restituirà le sottostringhe dei valori nella email
colonna che inizia con il primo carattere e arriva a sette caratteri.
Esempio 2:
Desideri visualizzare la sottostringa tra gli indici 2 e 6 (inclusi).
Soluzione 2:
SELECT email, SUBSTRING(email, 2, 5) AS substring FROM emails;
Il risultato è:
sottostringa | |
---|---|
[email protected] | ake99 |
[email protected] | amara |
[email protected] | otina |
[email protected] | essico |
Discussione:
Usi il SUBSTRING()
funzionano esattamente come negli esempi precedenti. Questa volta, il secondo argomento della funzione è 2
, poiché vogliamo iniziare dall'indice 2. La lunghezza della sottostringa è 5 (end_index - start_index + 1
).
Esempio 3:
Vorresti visualizzare la sottostringa che inizia con @
segno e termina alla fine della stringa, ma non conosci gli indici esatti o le lunghezze.
Soluzione 3:
SELECT email, SUBSTRING(email, CHARINDEX('@', email), LEN(email) - CHARINDEX('@', email) + 1) AS substring FROM emails;
Il risultato è:
sottostringa | |
---|---|
[email protected] | @gmail.com |
[email protected] | @zoho.com |
[email protected] | @yahoo.fr |
[email protected] | @onet.pl |
Discussione:
Usi il SUBSTRING()
funzionano esattamente come negli esempi precedenti. Questa volta, stai cercando un personaggio specifico la cui posizione può variare da una riga all'altra. Per trovare l'indice del carattere specifico, puoi utilizzare il CHARINDEX(character, column)
funzione dove carattere è il carattere specifico in cui desideri iniziare la sottostringa (qui, @
). La colonna dell'argomento è la colonna da cui desideri recuperare la sottostringa; può anche essere una stringa letterale.
Il terzo argomento di SUBSTRING()
funzione è la lunghezza della sottostringa. Puoi calcolarlo usando il CHARINDEX()
e il LEN()
funzioni. Puoi farlo sottraendo l'indice dalla lunghezza della colonna e aggiungendo 1:
LEN(email) - CHARINDEX('@', email) + 1
Potresti anche voler recuperare una sottostringa che non termina alla fine della stringa ma a un carattere specifico, ad esempio, prima di '.
'. Ecco come puoi farlo:
SELECT email, SUBSTRING(email, CHARINDEX('@', email), CHARINDEX('.', email) - CHARINDEX('@', email)) AS substring FROM emails;
Il risultato di questa query è:
sottostringa | |
---|---|
[email protected] | @gmail |
[email protected] | @zoho |
[email protected] | @yahoo |
[email protected] | @onet |
La parte CHARINDEX('.', email) - CHARINDEX('@', email)
calcola semplicemente la lunghezza della sottostringa.