MySQL 将逗号分隔数组字段拆分为多行记录
将 MySQL 逗号分隔数组字段拆分为多行记录
可以使用 MySQL 内置函数 SUBSTRING_INDEX 和 UNION ALL 操作来实现将一个字段的数组格式拆分为多行记录。
假设有一个名为 table1 的表格,其中的字段 array_column 用逗号分隔的数组格式,现在需要将其拆分为多行记录。可以使用以下 SQL 语句实现:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(array_column, ',', n.digit+1), ',', -1) AS array_value
FROM table1
INNER JOIN
(
SELECT 0 digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9
) n ON LENGTH(REPLACE(array_column, ',' , '')) <= LENGTH(array_column)-n.digit
上述 SQL 语句中,首先使用 INNER JOIN 和子查询生成了 10 行数字序列,这里使用了 10 行是因为这是一个常用的数字序列,如果需要拆分的数组比较长,可以根据需要增加数字序列的行数。
然后,在 SELECT 语句中使用了 SUBSTRING_INDEX 函数将 array_column 字段按照分隔符逐个拆分,并使用 digit 数字序列控制拆分的次数。最后使用 AS 关键字为拆分后的值起一个别名 array_value。
运行以上 SQL 语句后,可以得到一个包含多行记录的结果集,其中每行记录代表一个拆分后的数组值。
原文地址: https://www.cveoy.top/t/topic/nj9h 著作权归作者所有。请勿转载和采集!