Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да разделя един ред на няколко колони в mysql

Първо нормализирайте низа, като премахнете празните места и се уверите, че има % в края:

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

След това можем да преброим броя на записите с трик. Заменете „%“ с „%“ и пребройте броя интервали, добавени към низа. Например:

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

Използвайки substring_index, можем да добавяме колони за няколко местоположения:

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

За вашия пример US%UK%JAPAN%CANADA , това отпечатва:

LocationCount  Loc1    Loc2    Loc3
4              US      UK      JAPAN

Така че виждате, че може да се направи, но анализирането на низове не е една от силните страни на 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 Подреждане по сбор от колони

  2. Django и паралелна обработка:

  3. PHP/SQL база данни за запитване за добри практики и сигурност

  4. MySQL създава време и обновява времевата марка

  5. Каква е разликата между int и integer в MySQL 5.0?