首页 > 解决方案 > 将逗号分隔的字符串迁移到 json 数组

问题描述

我有一个旧数据库,其中一些列有逗号分隔的字符串,像这样存储technician,director,website designer

我想将它们转换为 JSON 数组,因此我可以使用 MySQL JSON 数组类型和与之关联的方法。
所以基本上我正在寻找一种在 SQL 中转换technician,director,website designer为的方法。["technician","director","website designer"]

列表的长度是任意的。我遇到的最大难题是如何在逗号分隔的字符串中的每个元素上应用 SQL 函数(例如,我可以JSON_QUOTE()在每个元素上运行),因为添加括号只是一个简单的CONCAT.

解决方案应该适用于 MySQL 5.7。

标签: mysqldatabasemariadbdata-migrationmysql-5.7

解决方案


您可以使用REPLACE来获取预期的字符串:

SELECT CONCAT('["', REPLACE('technician,director,website designer', ',', '","'), '"]')
-- ["technician","director","website designer"]

使用JSON_VALID您可以检查转换结果是否是有效的 JSON 值:

SELECT JSON_VALID(CONCAT('["', REPLACE('technician,director,website designer', ',', '","'), '"]'))
-- 1

dbfiddle.uk 上的演示


推荐阅读