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.