Esto se llama caminar una cadena . Este es un ejemplo de cómo podría hacerlo con las especificaciones proporcionadas:
Deberá crear una tabla que contenga tantos enteros como la longitud del campo + 1. Por lo tanto, si la longitud del campo es 255, necesitará 256 registros que solo contengan un solo número del 0 al 255.
int_table
:
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+---+
A continuación, necesitará una consulta que se una a esta tabla y verifique si existe una coma en esa ubicación o no. (Llamé a su tabla legacy_table
con los campos client
y 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) = ',')
)
Puede que no sea lo suficientemente eficiente como para que lo uses, pero pensé en presentarlo como un ejemplo para que sepas lo que está disponible.