Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Konwertowanie rozdzielanego ciągu na wiele wartości w mysql

Nazywa się to chodzeniem po łańcuchu . Oto przykład, jak możesz to zrobić z dostarczonymi specyfikacjami:

Będziesz musiał stworzyć tabelę zawierającą tyle liczb całkowitych, ile wynosi długość pola + 1. Więc jeśli długość pola wynosi 255, będziesz potrzebować 256 rekordów, które zawierają tylko jedną liczbę z zakresu 0-255.

int_table :

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

Następnie będziesz potrzebować zapytania, które łączy się w tej tabeli i sprawdza, czy przecinek istnieje w tej lokalizacji, czy nie. (Nazwałem twoją tabelę legacy_table z polami client i items , odpowiednio.)

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

Może nie być wystarczająco wydajny, abyś mógł z niego korzystać, ale pomyślałem, że przedstawię go jako przykład, abyś wiedział, co jest dostępne.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pętla skryptu Bash przez MySQL

  2. Jak utrzymywać sesje PHP w wielu domenach na tym samym serwerze?

  3. Przechowywanie danych zakodowanych w base64 jako typu danych BLOB lub TEXT

  4. Zmiana rozmiaru obrazu PHP

  5. Czy powinienem używać PreparedStatements do wszystkich wstawek do mojej bazy danych w Javie?