MySQL SUBSTRING() expliqué : extraire des parties d’une chaîne avec des exemples

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

La fonction SUBSTRING est une fonction MySQL importante utilisée pour extraire une sous‑chaîne d’une chaîne. Avec cette fonction, vous pouvez ne récupérer que la partie dont vous avez besoin à partir des données stockées dans une base de données. Par exemple, elle est utile lorsque vous souhaitez extraire la partie domaine d’une adresse e‑mail d’un utilisateur, 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 à partir de laquelle extraire.
  • pos : La position de départ (commence à 1).
  • len : Le nombre de caractères à extraire (optionnel).

Si pos est une valeur positive, MySQL compte en avant depuis le début de la chaîne. Si elle est négative, MySQL compte en arrière depuis la fin de la chaîne. Si len est omis, MySQL 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 et à extraire des parties spécifiques, ce qui facilite la recherche et le traitement efficace des informations dans une base de données.

2. Utilisation de base de la fonction SUBSTRING

Pour comprendre les bases, examinons quelques exemples simples.

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 comme len vaut 6, six caractères sont extraits.

2.2 Omission du paramètre de longueur

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

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

Le résultat est "World!", qui récupère tout à partir du 8ᵉ caractère jusqu’à la fin.

2.3 Utilisation d’une position négative

Si vous utilisez une valeur négative, vous pouvez 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 concrets.

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 extrait la chaîne après le « @ » et ne renvoie que la partie domaine.

3.2 Extraction d’une partie d’un code produit

Cet exemple extrait une section spécifique d’un code produit.

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

Dans cette requête, 4 caractères à partir du 5ᵉ caractère du code produit sont extraits et affichés dans une nouvelle colonne nommée product_id.

3.3 Utilisation dans une sous‑requête

En la combinant avec une sous‑requête, vous pouvez extraire des données sous des conditions plus 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 description des produits dont la category est « Electronics ».

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

D’autres fonctions pouvant être utilisées à des fins 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 souhaitez extraire une sous‑chaîne du début ou de la fin d’une chaîne.

4.2 Fonction SUBSTR

SUBSTR est un alias de SUBSTRING, il peut donc être utilisé de la même façon.

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

Cette requête renvoie "World!", tout comme SUBSTRING.

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

Cette section explique des utilisations plus avancées et des techniques d’optimisation.

5.1 Optimisation des performances

Utiliser SUBSTRING sur de grands ensembles de données peut affecter les performances. Si nécessaire, créez des index et vérifiez le plan d’exécution de la requête. De plus, si vous extrayez fréquemment la même sous‑chaîne, envisagez de mettre en cache le résultat.

5.2 L’utiliser dans une clause WHERE

Vous pouvez utiliser SUBSTRING dans une clause WHERE pour filtrer les enregistrements selon une condition de sous‑chaîne.

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

Cette requête recherche les produits dont les trois premiers caractères de product_code sont ‘ABC’.

6. Exemples et bonnes pratiques pour la fonction SUBSTRING

Voici des exemples pratiques d’utilisation de SUBSTRING et des bonnes pratiques pour le travail réel.

6.1 Exemple de code

L’exemple suivant sépare 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;

Dans cette requête, le prénom et le nom sont extraits d’un nom complet séparé par un espace.

6.2 Bonnes pratiques

  • Extraire uniquement ce dont vous avez besoin : Gardez la longueur de la sous‑chaîne aussi petite que possible pour réduire l’impact sur les performances.
  • Faire attention aux types de données : Si vous appliquez SUBSTRING à des données numériques, il peut être nécessaire de les convertir explicitement en chaîne.
  • Envisager l’utilisation des index : Lorsqu’on utilise SUBSTRING dans une clause WHERE, les index peuvent ne pas être exploités efficacement, il faut donc surveiller attentivement les performances de la requête.

7. Gestion des erreurs et différences de version

Cette section couvre la gestion des erreurs lors de l’utilisation de SUBSTRING ainsi que les différences entre les versions de MySQL.

7.1 Gestion des erreurs

Si la position spécifiée est en dehors de la plage de la chaîne, SUBSTRING renvoie une chaîne vide. Comme ce n’est pas une erreur, il est recommandé d’ajouter une logique pour valider le résultat à l’avance si nécessaire.

7.2 Différences de version

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