La fonction SUBSTRING() dans le langage SQL (ou SUBSTR() ) est utilisée pour segmenter une chaîne de caractère. Autrement dit, cela permet d’extraire une partie d’un chaîne, par exemple pour tronquer un texte.
Compatibilité :
- MySQL : SUBSTR() ou SUBSTRING()
- PostgreSQL : SUBSTR() ou SUBSTRING()
- Oracle : SUBSTR() ou SUBSTRING()
- SQL Server : SUBSTRING()
- SQLite : SUBSTR()
- Firebird : SUBSTRING()
Syntaxe
La fonction SUBSTRING() peut s’utiliser de 4 façons différentes, que voici :
- SUBSTRING(chaine, debut) : retourne la chaîne de caractère de “chaine” à partir de la position définie par “debut” (position en nombre de caractères)
- SUBSTRING(chaine FROM debut) : idem que précédent
- SUBSTRING(chaine, debut, longueur) : retourne la chaîne de caractère “chaine” en partant de la position définie par “debut” et sur la longueur définie par “longueur”
- SUBSTRING(chaine FROM debut FOR longueur) : idem que précédent
A savoir : il ne faut pas oublier que la fonction est aussi parfois appelée SUBSTR().
Compatibilité
Il est important de savoir que ces syntaxes ne sont pas toutes comprises de certains Système de Gestion de Base de Données (SGBD). Pour savoir si un SGBD comprend une de ces syntaxes, il convient de consulter les 2 tableaux récapitulatifs ci-dessous :
Fonction SUBSTR() :
SGBD | SUBSTR(string, start) | SUBSTR(string, start, length) | SUBSTR(string FROM start) | SUBSTR(string FROM start FOR length) |
---|---|---|---|---|
MySQL | ✔ | ✔ | ✔ | ✔ |
PostgreSQL | ✔ | ✔ | ✘ | ✘ |
Oracle | ✔ | ✔ | ✔ | ✔ |
SQL Server | ✘ | ✘ | ✘ | ✘ |
SQLite | ✔ | ✔ | ✘ | ✘ |
Firebird | ✘ | ✘ | ✘ | ✘ |
Fonction SUBSTRING() :
SGBD | SUBSTRING(string, start) | SUBSTRING(string, start, length) | SUBSTRING(string FROM start) | SUBSTRING(string FROM start FOR length) |
---|---|---|---|---|
MySQL | ✔ | ✔ | ✔ | ✔ |
PostgreSQL | ✘ | ✘ | ✔ | ✔ |
Oracle | ✔ | ✔ | ✔ | ✔ |
SQL Server | ✘ | ✔ | ✘ | ✘ |
SQLite | ✘ | ✘ | ✘ | ✘ |
Firebird | ✘ | ✘ | ✔ | ✔ |
Exemple de requête
Cette fonction peut s’utiliser dans une requête SQL en utilisant une syntaxe comme celle-ci:
SELECT SUBSTR(nom_colonne, 3, 10) FROM tableu
Dans cet exemple, le contenu de la colonne “nom_colonne” sera tronqué à partir du 4ème caractère sur 10 caractères.
Exemple
Imaginons une base de données qui contient une liste de pays en français et en anglais.
Table pays :
id | nom_fr_fr | nom_en_gb |
---|---|---|
1 | FRANCE | FRANCE |
2 | ESPAGNE | SPAIN |
3 | ALLEMAGNE | GERMANY |
4 | CHINE | CHINA |
Une requête SQL va être construite pour extraire les informations suivantes :
- L’identifiant du pays
- Le nom du pays en français
- Les 2 premiers caractères du nom en français (soit à partir du 1er caractère et sur une longueur de 2 caractères)
- Tout le nom en français, sans les 2 premiers caractères (soit tout le nom à partir du 3ème caractère)
Pour récupérer toutes ces données, il convient d’utiliser la requête SQL suivante :
SELECT id, nom_fr_fr, SUBSTR(nom_fr_fr, 1, 2), SUBSTR(nom_fr_fr, 3) FROM pays
Cette requête va retourner les résultats suivants :
id | nom_fr_fr | SUBSTR(nom_fr_fr, 1, 2) | SUBSTR(nom_fr_fr, 3) |
---|---|---|---|
1 | FRANCE | FR | ANCE |
2 | ESPAGNE | ES | PAGNE |
3 | ALLEMAGNE | AL | LEMAGNE |
4 | CHINE | CH | INE |
Ce tableau de résultat démontre bien qu’il est possible de segmenter un texte simplement.