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

MySQLJSON配列をコンマ区切りの文字列に変換する方法

    これが最も唯一のMySQLクリーンな方法であり、少なくとも8未満のMySQLバージョンでは

    クエリ

    SET SESSION group_concat_max_len = @@max_allowed_packet;
    
    SELECT
      GROUP_CONCAT(
         JSON_UNQUOTE(
           JSON_EXTRACT(records.json, CONCAT('$[', number_generator.number , ']'))
         )
      )                    
    
    FROM (
    
      SELECT 
       @row := @row + 1 AS number
      FROM (
        SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION   SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
      ) row1
      CROSS JOIN (
        SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION  SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
      ) row2
      CROSS JOIN (
        SELECT @row := -1 
      ) init_user_params 
    ) AS number_generator
    CROSS JOIN (
    
    
    SELECT 
        json
      , JSON_LENGTH(records.json) AS json_array_length    
    FROM (
    
      SELECT 
       '["+63(02)3647766", "+63(02)5467329", "+63(02)8555522", "+63(02)3642403"]' AS json
      FROM 
       DUAL  
    ) AS records
    
    ) AS records 
    WHERE
        number BETWEEN 0 AND  json_array_length - 1 
    

    結果

    | GROUP_CONCAT(
         JSON_UNQUOTE(
           JSON_EXTRACT(records.json, CONCAT('$[', number_generator.number , ']'))
         )
      ) |
    | -------------------------------------------------------------------------------------------------------------------------- |
    | +63(02)3647766,+63(02)5467329,+63(02)8555522,+63(02)3642403                                                                |
    

    デモ を参照してください。

    私は、誰もがすでにMySQL 8を使用しているとは思いませんが、完全を期すために追加しました。

    MySQL8.0クエリのみ

    SET SESSION group_concat_max_len = @@max_allowed_packet;
    
    SELECT 
     GROUP_CONCAT(item)
    FROM JSON_TABLE(
         '["+63(02)3647766", "+63(02)5467329", "+63(02)8555522", "+63(02)3642403"]'
       , "$[*]"
    
       COLUMNS (
           rowid FOR ORDINALITY
         , item VARCHAR(100) PATH "$"   
       )
    ) AS json_parsed  
    

    結果

    | GROUP_CONCAT(item)                                          |
    | ----------------------------------------------------------- |
    | +63(02)3647766,+63(02)5467329,+63(02)8555522,+63(02)3642403 |
    

    デモ を参照してください。

    REPLACE() ネスト方法はもっと面倒ですが、すべてのMySQLバージョンで機能するはずです。

    SELECT 
     REPLACE(
       REPLACE(
          REPLACE(
           '["+63(02)3647766", "+63(02)5467329", "+63(02)8555522", "+63(02)3642403"]'
           , '['
           , ''
         )
         , ']'
         , ''
       )
       , '"'
       , ''
     )
    

    結果

    | REPLACE(
       REPLACE(
          REPLACE(
           '["+63(02)3647766", "+63(02)5467329", "+63(02)8555522", "+63(02)3642403"]'
           , '['
           , ''
         )
         , ']'
         , ''
       )
       , '"'
       , ''
     ) |
    | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | +63(02)3647766, +63(02)5467329, +63(02)8555522, +63(02)3642403                                                                                                                                      |
    

    デモ を参照してください。



    1. MYSQLタグテーブルの並べ替え

    2. AirflowmysqlからgcpDagエラー

    3. GROUP BYを使用して、列を結合/連結します

    4. MySQLデータベースのパフォーマンスを提供するためのヒント-パート2-