sql >> Base de Datos >  >> RDS >> Mysql

Cómo dividir una sola fila en varias columnas en mysql

Primero normalice la cadena, elimine las ubicaciones vacías y asegúrese de que haya un % al final:

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

Entonces podemos contar el número de entradas con un truco. Reemplace '%' con '%' y cuente el número de espacios agregados a la cadena. Por ejemplo:

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 agregar columnas para varias ubicaciones:

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 su ejemplo US%UK%JAPAN%CANADA , esto imprime:

LocationCount  Loc1    Loc2    Loc3
4              US      UK      JAPAN

Como puede ver, se puede hacer, pero el análisis de cadenas no es uno de los puntos fuertes de SQL.