Mysql
 sql >> Base de données >  >> RDS >> Mysql

Conversion d'une chaîne délimitée en plusieurs valeurs dans mysql

Cela s'appelle marcher sur une chaîne . Voici un exemple de la façon dont vous pourriez le faire avec les spécifications fournies :

Vous devrez créer une table contenant autant d'entiers que la longueur du champ + 1. Ainsi, si la longueur du champ est de 255, vous aurez besoin de 256 enregistrements contenant un seul nombre compris entre 0 et 255.

int_table :

+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+---+

Ensuite, vous aurez besoin d'une requête qui se joint à cette table et vérifie si une virgule existe à cet emplacement ou non. (J'ai appelé votre table legacy_table avec les champs client et items , respectivement.)

select 
  legacy_table.client, 
  substring(
    legacy_table.items, 
    int_table.i + 1, 
    if(
      locate(',', legacy_table.items, int_table.i + 1) = 0, 
      length(legacy_table.items) + 1, 
      locate(',', legacy_table.items, int_table.i + 1)
    ) - (int_table.i + 1)
  ) as item
from legacy_table, int_table
where legacy_table.client = 'xyz001'
  and int_table.i < length(legacy_table.items)
  and (
    (int_table.i = 0) 
    or (substring(legacy_table.items, int_table.i, 1) = ',')
  )

Ce n'est peut-être pas assez efficace pour que vous l'utilisiez réellement, mais j'ai pensé que je le présenterais comme un exemple juste pour que vous sachiez ce qui est disponible.