sql >> データベース >  >> RDS >> Mysql

区切り文字列をmysqlで複数の値に変換する

    これは、文字列のウォーキング と呼ばれます。 。提供されている仕様を使用してこれを行う方法の例を次に示します。

    フィールドの長さ+1と同じ数の整数を含むテーブルを作成する必要があります。したがって、フィールドの長さが255の場合、0〜255の単一の数値を含む256個のレコードが必要になります。

    int_table

    +---+
    | i |
    +---+
    | 0 |
    | 1 |
    | 2 |
    | 3 |
    | 4 |
    | 5 |
    | 6 |
    +---+
    

    次に、このテーブルを結合し、その場所にコンマが存在するかどうかを確認するクエリが必要になります。 (私はあなたのテーブルをlegacy_tableと呼びました フィールドclient およびitems 、それぞれ。)

    select 
      legacy_table.client, 
      substring(
        legacy_table.items, 
        int_table.i + 1, 
        if(
          locate(',', legacy_table.items, int_table.i + 1) = 0, 
          length(legacy_table.items) + 1, 
          locate(',', legacy_table.items, int_table.i + 1)
        ) - (int_table.i + 1)
      ) as item
    from legacy_table, int_table
    where legacy_table.client = 'xyz001'
      and int_table.i < length(legacy_table.items)
      and (
        (int_table.i = 0) 
        or (substring(legacy_table.items, int_table.i, 1) = ',')
      )
    

    実際に使用するには効率が悪いかもしれませんが、何が利用できるかを理解するために、例として紹介したいと思います。



    1. ID列を使用してテーブルを作成する方法

    2. MySQL-サブクエリに基づいて値を更新します

    3. ProxySQL入門-MySQLとMariaDBの負荷分散チュートリアル

    4. SQLServer2012の列IDの増分が7番目のエントリで6から1000+にジャンプ