Mysql
 sql >> Database >  >> RDS >> Mysql

Conversione di stringhe delimitate in più valori in mysql

Questo è chiamato camminare su una stringa . Ecco un esempio di come potresti farlo con le specifiche fornite:

Dovrai creare una tabella che contenga tanti numeri interi quanti sono la lunghezza del campo + 1. Quindi, se la lunghezza del campo è 255, avrai bisogno di 256 record che contengano solo un singolo numero da 0 a 255.

int_table :

+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+---+

Successivamente, avrai bisogno di una query che si unisca a questa tabella e controlli se esiste una virgola in quella posizione o meno. (Ho chiamato il tuo tavolo legacy_table con i campi client e items , rispettivamente.)

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) = ',')
  )

Potrebbe non essere abbastanza efficiente per utilizzarlo effettivamente, ma ho pensato di presentarlo come esempio solo per sapere cosa è disponibile.