sql >> Databasteknik >  >> RDS >> Mysql

Konvertera avgränsad sträng till flera värden i mysql

Detta kallas gå ett snöre . Här är ett exempel på hur du kan göra det med de angivna specifikationerna:

Du måste skapa en tabell som innehåller lika många heltal som längden på fältet + 1. Så om fältets längd är 255 behöver du 256 poster som bara innehåller ett enda tal från 0-255.

int_table :

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

Därefter behöver du en fråga som ansluter till den här tabellen och kontrollerar om det finns ett kommatecken på den platsen eller inte. (Jag kallade din tabell för legacy_table med fälten client och items , respektive.)

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 kanske inte är tillräckligt effektivt för att du faktiskt ska använda det, men jag tänkte presentera det som ett exempel bara så att du vet vad som finns tillgängligt.



  1. Hur man binder datatabell till reportviewer körtid

  2. MySQL 5.5 partitionstabell av A-Z

  3. 3 sätt att få en kolumns datatyp i SQL Server (T-SQL)

  4. mysql, iterera genom kolumnnamn