Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como dividir uma única linha em várias colunas no mysql


Primeiro normalize a string, removendo locais vazios e certificando-se de que haja um % no final:
select replace(concat(user_location,'%'),'%%','%') as str
from YourTable where user_id = 1

Então podemos contar o número de entradas com um truque. Substitua '%' por '% ' e conte o número de espaços adicionados à string. Por exemplo:
select length(replace(str, '%', '% ')) - length(str)
    as LocationCount    
from (
    select replace(concat(user_location,'%'),'%%','%') as str
    from YourTable where user_id = 1
) normalized

Usando substring_index, podemos adicionar colunas para vários locais:
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

Para o seu exemplo US%UK%JAPAN%CANADA , isso imprime:
LocationCount  Loc1    Loc2    Loc3
4              US      UK      JAPAN

Então você vê que isso pode ser feito, mas analisar strings não é um dos pontos fortes do SQL.