Problema:
Vuoi estrarre una sottostringa dal testo in una determinata colonna.
Esempio:
Il nostro database ha una tabella denominata web_address
con i dati nelle colonne id
e address
. Vogliamo rimuovere il "www.
' all'inizio e '.com
' alla fine di ogni address
.
id | indirizzo |
---|---|
1 | www.example.com |
2 | www.google.com |
3 | www.learnsql.com |
Soluzione 1:
Per rimuovere i primi 4 caratteri:
SELECT SUBSTR(address, 5, LENGTH(address) -4) AS substring FROM web_address;
Per rimuovere gli ultimi 4 caratteri:
SELECT SUBSTR(address, 1, LENGTH(address) -4) AS substring FROM web_address;
Per rimuovere i primi 4 caratteri e gli ultimi 4 caratteri:
SELECT SUBSTR(address, 5, LENGTH(address) -8) AS substring FROM web_address;
Soluzione 2:
Per rimuovere i primi 4 caratteri:
SELECT SUBSTRING(address, 5, LENGTH(address)) AS substring FROM web_address;
Per rimuovere gli ultimi 4 caratteri:
SELECT SUBSTRING(address, 1, LENGTH(address) -4) AS substring FROM web_address;
Per rimuovere i primi 4 caratteri e gli ultimi 4 caratteri:
SELECT SUBSTRING(address, 5, LENGTH(address) -8) AS substring FROM web_address;
Soluzione 3:
Per rimuovere tutti i caratteri prima del secondo '.' da destra:
SELECT SUBSTRING_INDEX(address, '.', -2) AS substring FROM web_address;
Per rimuovere tutti i caratteri dopo il secondo '.' da sinistra:
SELECT SUBSTRING_INDEX(address, '.', 2) AS substring FROM web_address;
Per rimuovere tutti i caratteri dopo il secondo '.' da sinistra, quindi rimuovere tutti i caratteri prima del primo '.' da destra:
SELECT SUBSTRING_INDEX( SUBSTRING_INDEX(address, '.', 2), '.', -1 ) AS substring FROM web_address;
Il risultato è:
sottostringa |
---|
esempio |
learnsql |
Discussione:
La prima e la seconda soluzione rimuovono entrambe un numero specificato di caratteri dal testo con SUBSTR()
o SUBSTRING()
funzione. SUBSTR()
è sinonimo di SUBSTRING()
. Entrambi richiedono la stringa e la posizione iniziale come argomenti. L'ultimo argomento, che definisce il numero di caratteri da estrarre, è facoltativo. Se l'ultimo argomento viene omesso, verrà restituita l'intera stringa (dal punto iniziale).
Nella terza soluzione, il SUBSTRING_INDEX()
la funzione rimuove il testo prima o dopo i caratteri specificati. Richiede come argomenti la stringa, il carattere e quante istanze del carattere devono essere incontrate nel punto in cui inizia l'estrazione del testo.