如何将数据表中存储数组的列拆分为每个元素单独成行输出
数组列拆分为单行元素的实现方法
这个操作属于数组的行展开/扁平化处理,不同数据库对应的实现语法不同,常用数据库的写法如下:
- PostgreSQL
使用内置的unnest函数直接处理数组类型列:
SELECT unnest(val) AS val FROM 你的表名;
- MySQL 8.0及以上版本
如果val列存储的是JSON格式数组,使用JSON_TABLE实现:
SELECT j.val FROM 你的表名 t, JSON_TABLE(t.val, '$[*]' COLUMNS (val VARCHAR(255) PATH '$')) j;
- Hive / Spark SQL
使用explode函数展开数组:
SELECT explode(val) AS val FROM 你的表名;
- SQL Server
使用OPENJSON解析JSON数组并展开:
SELECT j.value AS val FROM 你的表名 t CROSS APPLY OPENJSON(t.val) j;
- Oracle 12c及以上版本
通过层级查询配合JSON函数实现:
SELECT JSON_VALUE(t.val, '$[' || lv.lvl || ']') AS val FROM 你的表名 t CROSS JOIN ( SELECT LEVEL - 1 AS lvl FROM dual CONNECT BY LEVEL <= (SELECT MAX(JSON_ARRAY_LENGTH(val)) FROM 你的表名) ) lv WHERE JSON_VALUE(t.val, '$[' || lv.lvl || ']') IS NOT NULL;
内容的提问来源于stack exchange,提问作者kotyara85
相关产品推荐
相关产品推荐

