Problème :
Vous souhaitez extraire une sous-chaîne du texte d'une colonne donnée.
Exemple :
Notre base de données a une table nommée web_address
avec des données dans les colonnes id
et address
. Nous voulons supprimer le 'www.
' au début et le '.com
' à la fin de chaque address
.
identifiant | adresse |
---|---|
1 | www.exemple.com |
2 | www.google.com |
3 | www.learnsql.com |
Solution 1 :
Pour supprimer les 4 premiers caractères :
SELECT SUBSTR(address, 5, LENGTH(address) -4) AS substring FROM web_address;
Pour supprimer les 4 derniers caractères :
SELECT SUBSTR(address, 1, LENGTH(address) -4) AS substring FROM web_address;
Pour supprimer les 4 premiers caractères et les 4 derniers caractères :
SELECT SUBSTR(address, 5, LENGTH(address) -8) AS substring FROM web_address;
Solution 2 :
Pour supprimer les 4 premiers caractères :
SELECT SUBSTRING(address, 5, LENGTH(address)) AS substring FROM web_address;
Pour supprimer les 4 derniers caractères :
SELECT SUBSTRING(address, 1, LENGTH(address) -4) AS substring FROM web_address;
Pour supprimer les 4 premiers caractères et les 4 derniers caractères :
SELECT SUBSTRING(address, 5, LENGTH(address) -8) AS substring FROM web_address;
Solution 3 :
Pour supprimer tous les caractères avant le deuxième '.' en partant de la droite :
SELECT SUBSTRING_INDEX(address, '.', -2) AS substring FROM web_address;
Pour supprimer tous les caractères après le deuxième '.' en partant de la gauche :
SELECT SUBSTRING_INDEX(address, '.', 2) AS substring FROM web_address;
Pour supprimer tous les caractères après le deuxième '.' en partant de la gauche, puis supprimer tous les caractères avant le premier '.' en partant de la droite :
SELECT SUBSTRING_INDEX( SUBSTRING_INDEX(address, '.', 2), '.', -1 ) AS substring FROM web_address;
Le résultat est :
sous-chaîne |
---|
exemple |
apprendre SQL |
Discussion :
La première et la deuxième solutions suppriment toutes deux un nombre spécifié de caractères du texte avec le SUBSTR()
ou SUBSTRING()
une fonction. SUBSTR()
est un synonyme de SUBSTRING()
. Ils nécessitent tous deux la chaîne et la position de départ comme arguments. Le dernier argument, qui définit le nombre de caractères à extraire, est facultatif. Si le dernier argument est omis, la chaîne entière (à partir du point de départ) sera renvoyée.
Dans la troisième solution, le SUBSTRING_INDEX()
La fonction supprime le texte avant ou après les caractères spécifiés. Il nécessite comme arguments la chaîne, le caractère et le nombre d'instances du caractère à rencontrer à l'endroit où l'extraction de texte commence.