Dette kaldes at gå en snor . Her er et eksempel på, hvordan du kan gøre det med de angivne specifikationer:
Du skal oprette en tabel, som indeholder lige så mange heltal som længden af feltet + 1. Så hvis feltets længde er 255, skal du bruge 256 poster, som kun indeholder et enkelt tal fra 0-255.
int_table
:
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+---+
Dernæst skal du bruge en forespørgsel, som slutter sig til denne tabel og kontrollerer, om der findes et komma på denne placering eller ej. (Jeg kaldte din tabel legacy_table
med felterne client
og items
, henholdsvis.)
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) = ',')
)
Det er måske ikke effektivt nok til, at du rent faktisk kan bruge det, men jeg tænkte, at jeg ville præsentere det som et eksempel, bare så du ved, hvad der er tilgængeligt.