これは、文字列のウォーキング と呼ばれます。 。提供されている仕様を使用してこれを行う方法の例を次に示します。
フィールドの長さ+1と同じ数の整数を含むテーブルを作成する必要があります。したがって、フィールドの長さが255の場合、0〜255の単一の数値を含む256個のレコードが必要になります。
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) = ',')
)
実際に使用するには効率が悪いかもしれませんが、何が利用できるかを理解するために、例として紹介したいと思います。