如何将 MySQL JSON 数组转换为逗号分隔的字符串

问题:如何将 MySQL JSON 数组转换为逗号分隔的字符串

我在一列中有以下电话号码:

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

我怎样才能得到这样的信息:

+63(02)3647766,+63(02)5467329,+63(02)8555522,+63(02)3642403

解答

我认为这是最唯一的 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                                                                |

见演示

你听说过 JSON_TABLE() 吗? – 牡蛎

我有,我不认为每个人都已经在 MySQL 8 上,但为了完整性我也添加了它。

仅限 MySQL 8.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                                                                                                                                      |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MySQL 5.7版本及以上支持解析JSON字符串,可通过以下函数实现: 1. JSON_EXTRACT(json, path) 该函数用于从JSON字符串中提取指定路径的值。其中,json为要解析的JSON字符串,path为要提取的路径,路径由“$”和属性名组成,如“$.name”。 示例: 假设JSON字符串为{"name":"Alice","age":18},要提取其中的age属性值,可使用以下代码: SELECT JSON_EXTRACT('{"name":"Alice","age":18}', '$.age'); 结果为18。 2. JSON_EXTRACT_ARRAY_ELEMENT(json, index) 该函数用于从JSON数组中提取指定索引位置的元素值。其中,json为要解析的JSON字符串,index为要提取的元素索引,索引从0开始。 示例: 假设JSON字符串为["Alice","Bob","Charlie"],要提取其中第二个元素值,可使用以下代码: SELECT JSON_EXTRACT_ARRAY_ELEMENT('["Alice","Bob","Charlie"]', 1); 结果为"Bob"。 3. JSON_OBJECT(key1, val1, key2, val2, ...) 该函数用于创建一个JSON对象,其中key为属性名,val为属性值。多个键值对之间用逗号分隔。 示例: 要创建一个JSON对象{"name":"Alice","age":18},可使用以下代码: SELECT JSON_OBJECT('name', 'Alice', 'age', 18); 结果为{"name":"Alice","age":18}。 4. JSON_ARRAY(val1, val2, ...) 该函数用于创建一个JSON数组,其中val为数组元素值。多个元素之间用逗号分隔。 示例: 要创建一个JSON数组["Alice","Bob","Charlie"],可使用以下代码: SELECT JSON_ARRAY('Alice', 'Bob', 'Charlie'); 结果为["Alice","Bob","Charlie"]。 5. JSON_SET(json, path, val) 该函数用于向JSON字符串中指定路径位置设置一个新的值。其中,json为要修改的JSON字符串,path为要修改的路径,val为要设置的新值。 示例: 假设JSON字符串为{"name":"Alice","age":18},要将其中的age属性值改为20,可使用以下代码: SELECT JSON_SET('{"name":"Alice","age":18}', '$.age', 20); 结果为{"name":"Alice","age":20}。 除以上函数外,MySQL还提供了其他一些用于解析JSON字符串的函数,如JSON_REMOVE、JSON_REPLACE、JSON_INSERT等。详细用法可参考官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全能资料库

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值