Mih*_*aga 5 mysql json mysql-json
我在列中有以下电话号码:
["+63(02)3647766", "+63(02)5467329", "+63(02)8555522", "+63(02)3642403"]
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到这样的信息:
+63(02)3647766,+63(02)5467329,+63(02)8555522,+63(02)3642403
Run Code Online (Sandbox Code Playgroud)
我认为这是最简单的 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
Run Code Online (Sandbox Code Playgroud)
结果
| GROUP_CONCAT(
JSON_UNQUOTE(
JSON_EXTRACT(records.json, CONCAT('$[', number_generator.number , ']'))
)
) |
| -------------------------------------------------------------------------------------------------------------------------- |
| +63(02)3647766,+63(02)5467329,+63(02)8555522,+63(02)3642403 |
Run Code Online (Sandbox Code Playgroud)
看演示
你听说过 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
Run Code Online (Sandbox Code Playgroud)
结果
| GROUP_CONCAT(item) |
| ----------------------------------------------------------- |
| +63(02)3647766,+63(02)5467329,+63(02)8555522,+63(02)3642403 |
Run Code Online (Sandbox Code Playgroud)
看演示
该REPLACE()嵌套方法是较为凌乱,但应该对所有的MySQL版本。
SELECT
REPLACE(
REPLACE(
REPLACE(
'["+63(02)3647766", "+63(02)5467329", "+63(02)8555522", "+63(02)3642403"]'
, '['
, ''
)
, ']'
, ''
)
, '"'
, ''
)
Run Code Online (Sandbox Code Playgroud)
结果
| 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 |
Run Code Online (Sandbox Code Playgroud)
看演示
小智 5
所以如果你有替换替换功能。它超级酷而且简单。如果要构建以逗号分隔的 varchar 值,请使用以下命令;
@json_array = [“值1”,“值2”]
select replace(replace(replace(json_extract(@json_array, '$'), '"', '\''), '[', ''), ']', '');
Run Code Online (Sandbox Code Playgroud)
但如果你想建立数字然后使用
select replace(replace(replace(json_extract(@json_array, '$'), '"', ''), '[', ''), ']', '');enter code here
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8253 次 |
| 最近记录: |