sql >> Database >  >> RDS >> Mysql

Gescheiden tekenreeks converteren naar meerdere waarden in mysql

Dit heet een touwtje lopen . Hier is een voorbeeld van hoe u het zou kunnen doen met de verstrekte specificaties:

U moet een tabel maken die net zoveel gehele getallen bevat als de lengte van het veld + 1. Dus als de lengte van het veld 255 is, hebt u 256 records nodig die slechts een enkel getal van 0-255 bevatten.

int_table :

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

Vervolgens hebt u een query nodig die in deze tabel samenkomt en controleert of er een komma op die locatie staat of niet. (Ik noemde je tabel legacy_table met de velden client en items , respectievelijk.)

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

Het is misschien niet efficiënt genoeg voor u om het daadwerkelijk te gebruiken, maar ik dacht ik geef het als voorbeeld zodat u weet wat er beschikbaar is.



  1. Een opgeslagen procedure maken in SQL Server 2017

  2. Hoe de Ln()-functie werkt in PostgreSQL

  3. Ontdek vrije ruimte op tablespace

  4. Hoe maak je de module Aankomende verjaardagen in Rails?