Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Convertendo string delimitada em vários valores no mysql


Isso é chamado de caminhando uma string . Aqui está um exemplo de como você pode fazer isso com as especificações fornecidas:

Você precisará criar uma tabela que contenha tantos números inteiros quanto o comprimento do campo + 1. Portanto, se o comprimento do campo for 255, você precisará de 256 registros que contenham apenas um único número de 0 a 255.

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

Em seguida, você precisará de uma consulta que se junte a esta tabela e verifique se existe uma vírgula nesse local ou não. (Chamei sua tabela de legacy_table com os campos client e items , respectivamente.)
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) = ',')
  )

Pode não ser eficiente o suficiente para você realmente usá-lo, mas pensei em apresentá-lo como um exemplo apenas para que você saiba o que está disponível.