相关文章推荐
闯红灯的柿子  ·  mysql ...·  1 周前    · 
无邪的柑橘  ·  MySQL ...·  1 周前    · 
威武的大象  ·  mysql ...·  5 天前    · 
爱听歌的咖啡豆  ·  Python ...·  2 月前    · 
讲道义的手链  ·  mongodb aggregate ...·  1 年前    · 
读研的橡皮擦  ·  spark-RDD基础 - 知乎·  1 年前    · 
热心的大熊猫  ·  Google ...·  1 年前    · 

I have the following phone numbers in a column:

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

How can I get that info like this:

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

Answers

i think this is the most only MySQL clean way, atleast for MySQL versions under 8

Query

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_LENGTH(records.json) AS json_array_length    
FROM (
  SELECT 
   '["+63(02)3647766", "+63(02)5467329", "+63(02)8555522", "+63(02)3642403"]' AS json
) AS records
) AS records 
WHERE
    number BETWEEN 0 AND  json_array_length - 1 

Result

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

see demo

Have you heard of JSON_TABLE()? – oysteing

I have, i dont assume everybody to be on MySQL 8 already but i added it for completeness also.

MySQL 8.0 query only

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  

Result

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

see demo

The REPLACE() nesting method is more messy, but should work on all MySQL versions.

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

Result

| 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                                                                                                                                      |

see demo

Logo

MySQL社区,全面介绍MySQL下载、安装、应用场景和常见问题,帮助开发者快速了解和使用

更多推荐

  • 浏览量 97
  • 收藏 0
  • 0

所有评论(0)