Comment interroger un champ CSV dans une requête MySQL

Publié le 6 Janvier 2012

Dans une table mysql on stock un champ 'data' qui contient en fait des chaînes de caractères au format csv.

Jusque là tout va bien jusqu'au moment où on veut récupérer la valeur disons du 4ème champs du csv.

J'ai pensé dans un premier temps à bricoler un truc avec LIKE et des '%' mais j'ai trouvé la fonction SUBSTRING_INDEX de mysql qui s'utilise de la manière suivante:

SELECT SUBSTRING_INDEX('data1,data2,data3,data4,data5,data6', ',', 4);

et voici le résultat :

data1,data2,data3,data4

Oui c'est pas exactement ce que je voulais mais on s'en approche. En fait on récupère tout le début de la chaîne jusqu'au champ 4.

Reste plus qu'à effacer le début de la chaîne, et justement SUBSTRING_INDEX s'utilise aussi avec des index négatifs pour compter à partir de la fin de la chaîne et donc:

SELECT SUBSTRING_INDEX('data1,data2,data3,data4', ',', -1);

donne:

data4

Yes! Si on combine les 2 appels ça donne:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('data1,data2,data3,data4,data5,data6', ',', 4), ',', -1);

C'est un peu long à écrire mais on peut créer une fonction pour l'occasion afin de simplifier l'écriture des requêtes.

Rédigé par Bliz

Publié dans #MySQL

Repost 0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article