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つではありません。



    1. クエリの最適化:DBMS_METADATA.GET_DDL(Oracle)

    2. C#からSQL Server 2008のストアドプロシージャにXMLを渡す方法は?

    3. mysql_connect(localhost、root、mypasswd)をファイルに書き込むのは安全ですか?

    4. なぜTRANSACTION/COMMITはPHP/MySQL(InnoDB)でパフォーマンスを大幅に向上させるのですか?