Fonction SUBSTRING de MySQL : syntaxe, exemples et bonnes pratiques

1. Qu’est‑ce que la fonction SUBSTRING ?

La fonction SUBSTRING dans MySQL est un outil essentiel pour extraire une partie d’une chaîne. Avec cette fonction, vous pouvez récupérer uniquement la partie nécessaire des données d’une base de données. Par exemple, elle est utile pour extraire le domaine d’une adresse e‑mail ou récupérer une section spécifique d’un code produit.

1.1 Syntaxe de base

La syntaxe de base de la fonction SUBSTRING est la suivante :

SUBSTRING(str, pos)
SUBSTRING(str, pos, len)
  • str : La chaîne cible à extraire.
  • pos : La position de départ (indice à partir de 1).
  • len : Le nombre de caractères à extraire (optionnel).

Si pos est positif, il compte à partir du début de la chaîne. S’il est négatif, il compte à partir de la fin. Si len est omis, la fonction extrait de la position spécifiée jusqu’à la fin de la chaîne.

1.2 Cas d’utilisation de la fonction SUBSTRING

Cette fonction sert à formater les données textuelles ou à extraire des parties spécifiques, rendant la récupération et le traitement des données dans les bases de données plus efficaces.

2. Utilisation de base de la fonction SUBSTRING

Examinons un exemple simple pour comprendre son fonctionnement.

2.1 Extraction d’une partie d’une chaîne

La requête suivante extrait 6 caractères à partir du 3ᵉ caractère de la chaîne « Hello, World! ».

SELECT SUBSTRING('Hello, World!', 3, 6);

Le résultat est « llo, W ». Comme pos vaut 3, l’extraction commence au 3ᵉ caractère, et avec len fixé à 6, 6 caractères sont récupérés.

2.2 Omission de la longueur

Si vous omettez len, la fonction extraira de la position spécifiée jusqu’à la fin de la chaîne.

SELECT SUBSTRING('Hello, World!', 8);

Le résultat est « World! », à partir du 8ᵉ caractère jusqu’à la fin.

2.3 Position négative

Utiliser une valeur négative permet de spécifier la position depuis la fin de la chaîne.

SELECT SUBSTRING('Hello, World!', -5);

Cette requête renvoie « orld! », en extrayant les 5 derniers caractères.

3. Applications pratiques de la fonction SUBSTRING

La fonction SUBSTRING est fréquemment utilisée dans des opérations de données réelles. Voici quelques exemples.

3.1 Extraction du domaine d’une adresse e‑mail

En combinant SUBSTRING avec LOCATE, vous pouvez extraire la partie domaine d’une adresse e‑mail.

SELECT email, SUBSTRING(email, LOCATE('@', email) + 1) AS domain FROM users;

Cette requête récupère la chaîne située après le symbole « @ », vous ne conservant que la partie domaine.

3.2 Extraction d’une partie d’un code produit

Voici un exemple d’extraction d’une partie spécifique d’un code produit.

SELECT product_code, SUBSTRING(product_code, 5, 4) AS product_id FROM products;

Cette requête extrait 4 caractères à partir du 5ᵉ caractère du code produit et les affiche dans une nouvelle colonne product_id.

3.3 Utilisation avec des sous‑requêtes

La combiner avec des sous‑requêtes permet d’extraire des données sous des conditions complexes.

SELECT id, SUBSTRING(description, 1, 10) AS short_desc FROM (SELECT * FROM products WHERE category = 'Electronics') AS sub;

Cette requête extrait les 10 premiers caractères de la colonne description des produits dont la category est « Electronics ».

4. Comparaison avec d’autres fonctions de chaîne

D’autres fonctions aux objectifs similaires à SUBSTRING incluent LEFT, RIGHT et SUBSTR.

4.1 Fonctions LEFT et RIGHT

  • LEFT(str, len) : Récupère le nombre spécifié de caractères depuis le début de la chaîne.
  • RIGHT(str, len) : Récupère le nombre spécifié de caractères depuis la fin de la chaîne.
SELECT LEFT('Hello, World!', 5);  -- "Hello"
SELECT RIGHT('Hello, World!', 6); -- "World!"

Ces fonctions sont pratiques lorsque vous devez extraire une portion d’une chaîne depuis une extrémité précise.

4.2 Fonction SUBSTR

SUBSTR est un alias de SUBSTRING et peut être utilisé de la même manière.

SELECT SUBSTR('Hello, World!', 8); -- "World!"

Cette requête renvoie « World! », exactement comme le ferait SUBSTRING.

5. Utilisation avancée et optimisation de la fonction SUBSTRING

Voici comment utiliser SUBSTRING de manière plus efficace et optimiser ses performances.

5.1 Optimisation des performances

L’utilisation de SUBSTRING sur de grands ensembles de données peut affecter les performances. Envisagez de créer des index et de vérifier le plan d’exécution de la requête si nécessaire. Si vous extrayez fréquemment la même sous‑chaîne, la mise en cache des résultats peut également aider.

5.2 Utilisation dans la clause WHERE

Vous pouvez utiliser SUBSTRING dans une clause WHERE pour rechercher en fonction d’une partie d’une chaîne.

SELECT * FROM products WHERE SUBSTRING(product_code, 1, 3) = 'ABC';

Cette requête récupère les produits dont le product_code commence par ‘ABC’.

6. Exemples et bonnes pratiques pour la fonction SUBSTRING

Voici des exemples pratiques et des bonnes pratiques pour l’utilisation de SUBSTRING.

6.1 Exemple de code

L’exemple suivant divise le nom complet d’un client en prénom et nom de famille.

SELECT name, SUBSTRING(name, 1, LOCATE(' ', name) - 1) AS first_name,
       SUBSTRING(name, LOCATE(' ', name) + 1) AS last_name
FROM customers;

Cette requête extrait le prénom et le nom de famille d’un nom complet séparé par un espace.

6.2 Bonnes pratiques

  • Extraction minimale : N’extraire que ce qui est nécessaire avec SUBSTRING afin de minimiser l’impact sur les performances.
  • Faire attention au type de données : Lors de l’application de SUBSTRING à des données numériques, les convertir explicitement en chaîne d’abord.
  • Considérations d’index : L’utilisation de SUBSTRING dans une clause WHERE peut empêcher l’utilisation des index, il faut donc vérifier les performances de votre requête.

7. Gestion des erreurs et différences de version

Passons en revue la gestion des erreurs et les différences de comportement de SUBSTRING selon les versions de MySQL.

7.1 Gestion des erreurs

Si la position spécifiée dans SUBSTRING est en dehors de la plage de la chaîne, elle renvoie une chaîne vide. Comme ce n’est pas une erreur, il est recommandé d’ajouter une logique pour vérifier les résultats au préalable.

7.2 Différences de version

Selon votre version de MySQL, le comportement de SUBSTRING peut varier. Par exemple, certaines versions plus anciennes gèrent les caractères multioctets différemment. Vérifiez la compatibilité entre les versions et appliquez les mesures appropriées si nécessaire.