Điều này được gọi là đi bộ một chuỗi . Dưới đây là một ví dụ về cách bạn có thể làm điều đó với các thông số kỹ thuật được cung cấp:
Bạn sẽ cần tạo một bảng chứa nhiều số nguyên bằng độ dài của trường + 1. Vì vậy, nếu độ dài của trường là 255, bạn sẽ cần 256 bản ghi chỉ chứa một số duy nhất từ 0-255.
int_table
:
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+---+
Tiếp theo, bạn sẽ cần một truy vấn tham gia vào bảng này và kiểm tra xem dấu phẩy có tồn tại ở vị trí đó hay không. (Tôi đã gọi bảng của bạn là legacy_table
với các trường client
và items
, tương ứng.)
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) = ',')
)
Nó có thể không đủ hiệu quả để bạn thực sự sử dụng nó, nhưng tôi nghĩ tôi sẽ trình bày nó như một ví dụ chỉ để bạn biết những gì có sẵn.