SQL SUBSTRING()

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() :

SGBDSUBSTR(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() :

SGBDSUBSTRING(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 :

idnom_fr_frnom_en_gb
1FRANCEFRANCE
2ESPAGNESPAIN
3ALLEMAGNEGERMANY
4CHINECHINA

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 :

idnom_fr_frSUBSTR(nom_fr_fr, 1, 2)SUBSTR(nom_fr_fr, 3)
1FRANCEFRANCE
2ESPAGNEESPAGNE
3ALLEMAGNEALLEMAGNE
4CHINECHINE

Ce tableau de résultat démontre bien qu’il est possible de segmenter un texte simplement.

Exemple d’utilisation

Partager