这被称为
walking a string.这是一个如何使用提供的规范来做到这一点的示例:
您需要创建一个包含与字段长度1一样多的整数的表.因此,如果字段的长度为255,则需要256条记录,其中只包含0-255的单个数字.
int_table:
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+---+
接下来,您将需要一个连接此表的查询,并检查该位置是否存在逗号. (我分别使用字段client和items调用了表legacy_table.)
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) = ',')
)
它可能没有足够的效率让你真正使用它,但我想我会把它作为一个例子,只是让你知道什么是可用的.