SQL récupération d'une partie de string (un explode en sql?)

SQL récupération d'une partie de string (un explode en sql?) - SQL/NoSQL - Programmation

Marsh Posté le 03-04-2008 à 19:51:27    

Bonjour,
 
je me demandais si il était possible de récupérer le Xème mot d'une chaine de caractères ayant des délimiteurs (un peu comme le ferait la fonction explode de php)...
 
je m'explique:
 
J'ai une base de donnée MySQL avec une table possédant une colonne "Data" dans ce champ se trouve une série de nombres séparés par des espaces (ce n'est pas moi qui l'ai faite). Je dois récupérer toutes les lignes dont le 20ème nombre de la chaine de nombre est supérieur à 300.
 
les problèmes:
 
je ne peux pas récupérer toutes les lignes et les traiter par mon programme (php) car il y en a beaucoup de trop!
je ne peux pas changer la structure de la table et "spliter" tous les nombres dans des colonnes car un autre programme utilise cette BD.
les nombres variants entre 0 et 375 je ne peux pas me baser sur la longueur du début de chaine et utiliser SUBSTRING(), vu qu'elle varie.
 
 
Mais, je ne connais sans doute pas toutes les fonctions sql et peut être y'a t'il une solution qui m'échappe?  
Il y a t'il moyen de réaliser une procédure stockée qui permettrait de le faire?
 
 
 
 
 

Reply

Marsh Posté le 03-04-2008 à 19:51:27   

Reply

Marsh Posté le 04-04-2008 à 10:24:39    

il doit surement exister en mysql une fonction qui te permet de retrouver un caractère dans une chaine, et de retrouver la position de la enieme occurence de ce caractere.
 
donc en faisant un truc de ce style avec quelques ajustements.
 

Code :
  1. select substr(ton_champ,instr(ton_champ,' ',19),instr(ton_champ,' ',20)-instr(ton_champ,' ',19))
  2. from ta_table


 
mais bon une petite procedure sur le sgbd ne ferait effectivement pas de mal
 

Reply

Marsh Posté le 04-04-2008 à 10:49:57    

SUBSTRING_INDEX


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed