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

Jak podzielić pojedynczy wiersz na wiele kolumn w mysql

Najpierw znormalizuj ciąg, usuwając puste lokalizacje i upewniając się, że na końcu jest %:

select replace(concat(user_location,'%'),'%%','%') as str
from YourTable where user_id = 1

Następnie możemy policzyć liczbę wejść za pomocą triku. Zamień „%” na „%” i policz liczbę spacji dodanych do ciągu. Na przykład:

select length(replace(str, '%', '% ')) - length(str)
    as LocationCount    
from (
    select replace(concat(user_location,'%'),'%%','%') as str
    from YourTable where user_id = 1
) normalized

Używając substring_index, możemy dodać kolumny dla wielu lokalizacji:

select length(replace(str, '%', '% ')) - length(str)
    as LocationCount    
, substring_index(substring_index(str,'%',1),'%',-1) as Loc1
, substring_index(substring_index(str,'%',2),'%',-1) as Loc2
, substring_index(substring_index(str,'%',3),'%',-1) as Loc3
from (
    select replace(concat(user_location,'%'),'%%','%') as str
    from YourTable where user_id = 1
) normalized

Na przykład US%UK%JAPAN%CANADA , to drukuje:

LocationCount  Loc1    Loc2    Loc3
4              US      UK      JAPAN

Widzisz, że można to zrobić, ale parsowanie ciągów nie jest jedną z mocnych stron SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Dlaczego 5. ID w klauzuli IN drastycznie zmienia plan zapytań?

  2. Kiedy mam wywołać bind_param, jeśli używam przygotowanych instrukcji MySQLi w pętli?

  3. Wysoka dostępność przy niewielkim budżecie — wdrożenie minimalnego dwuwęzłowego klastra MySQL Galera

  4. Mały limit czasu zapytania PHP MySQL, należy ustawić limit na 10

  5. zadania cron lub harmonogram PHP