sql >> Databáze >  >> RDS >> Mysql

Jak rozdělit jeden řádek na více sloupců v mysql

Nejprve normalizujte řetězec, odstraňte prázdná místa a ujistěte se, že na konci je %:

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

Potom můžeme trikem spočítat počet vstupů. Nahraďte '%' znakem '% ' a spočítejte počet mezer přidaných do řetězce. Například:

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

Pomocí substring_index můžeme přidat sloupce pro řadu umístění:

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

Například US%UK%JAPAN%CANADA , toto vytiskne:

LocationCount  Loc1    Loc2    Loc3
4              US      UK      JAPAN

Takže vidíte, že to lze udělat, ale analýza řetězců není jednou ze silných stránek SQL.



  1. Výběr náhodných otázek z databáze MySQL; správná odpověď zmatená

  2. aktualizovat více řádků pomocí limitu v mysql?

  3. magento tabulka sales_flat_order pole protect_code vysvětlení

  4. Jak nastavit strukturu indexu ElasticSearch s více vazbami entit