Utilitaires
Scripts
Divers
Jeux
Rechercher
Quillevere.net
Réflexions informatiques

Alternative au SPLIT en MySQL

15/10/2020

Le SGBDR MySQL ne dispose pas de méthode similaire à Split (Java) ou Explode (PHP) permettant d'extraire une liste d'éléments depuis une chaîne contenant un séparateur particulier. Typiquement, extraire la chaîne "b" depuis "a;b;c".

Cependant, la fonction SUBSTRING_INDEX (chaîne, séparateur, compteur) peut être utilisée pour pallier ce manque.

Présentation de Substring_index

SUBSTRING_INDEX extrait une partie de chaîne du début de la chaîne jusqu'au nombre d'éléments indiqué. Quelques exemples :

SELECT SUBSTRING_INDEX('a;b;c', ';', 1)

renverra 'a'

SELECT SUBSTRING_INDEX('a;b;c', ';', 2)

renverra 'a;b'

SELECT SUBSTRING_INDEX('a;b;c', ';', 3)

renverra 'a;b;c'

Le 3ème paramètre, le compteur, utilise une valeur positive pour la recherche de gauche à droite et une valeur négative pour une recherche de droite à gauche.

SELECT SUBSTRING_INDEX('a;b;c', ';', -1)

renverra 'c'

SELECT SUBSTRING_INDEX('a;b;c', ';', -2)

renverra 'b;c'

SELECT SUBSTRING_INDEX('a;b;c', ';', -3)

renverra 'a;b;c'

Solution pour extraire un élément d'une chaîne délimitée

L'astuce consiste à combiner 2 appels à cette fonction. Deux possibilités :

  • Soit en appelant une première fois avec un nombre positif pour mettre en bout de chaîne la valeur à retenir et une seconde fois avec la position -1
  • Soit en appelant avec une position négative puis une position 1.

Par exemple, pour extraire le "b" en 2ème position, on peut faire :

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a;b;c', ';', 2) , ';', -1)

ou

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a;b;c', ';', -2) , ';', 1)
Attention : si la position demandée n'est pas trouvée dans la chaîne, MySQL renvoie toute la chaîne.
Dernière modification le 26/10/2020 - Quillevere.net

Rechercher sur le site

rss RSS info Informations