Това се нарича ходене по низ . Ето пример за това как можете да го направите с предоставените спецификации:
Ще трябва да създадете таблица, която съдържа толкова цели числа, колкото дължината на полето + 1. Така че, ако дължината на полето е 255, ще ви трябват 256 записа, които съдържат само едно число от 0-255.
int_table
:
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+---+
След това ще ви трябва заявка, която се присъединява към тази таблица и проверява дали на това място съществува запетая или не. (Нарекох вашата таблица legacy_table
с полетата client
и items
, съответно.)
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) = ',')
)
Може да не е достатъчно ефективен, за да го използвате действително, но реших да го представя като пример, само за да знаете какво е налично.