You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL拆分JSON数组列为多字段的SELECT语句实现

当然可以搞定!具体怎么写SELECT语句得看你用的是哪种数据库,我给你整理了几种主流数据库的实现方案,直接套用就行:

MySQL(5.7+版本)

MySQL从5.7开始原生支持JSON操作,你可以用->>运算符(自动去除字符串引号)快速提取数组里的属性值:

SELECT
    Company,
    User->>'$[0].Name' AS User_1_name,
    User->>'$[0].email' AS User_1_email,
    User->>'$[0].password' AS User_1_password,
    User->>'$[1].Name' AS User_2_name,
    User->>'$[1].email' AS User_2_email,
    User->>'$[1].password' AS User_2_password
FROM your_table_name;

如果习惯用函数写法,也可以替换成JSON_UNQUOTE(JSON_EXTRACT(User, '$[0].Name')),效果完全一致。

PostgreSQL

PostgreSQL对JSON的支持非常灵活,假设你的User列是文本类型,先转成JSON再提取:

SELECT
    Company,
    (User::json -> 0 ->> 'Name') AS User_1_name,
    (User::json -> 0 ->> 'email') AS User_1_email,
    (User::json -> 0 ->> 'password') AS User_1_password,
    (User::json -> 1 ->> 'Name') AS User_2_name,
    (User::json -> 1 ->> 'email') AS User_2_email,
    (User::json -> 1 ->> 'password') AS User_2_password
FROM your_table_name;

如果User列已经是json或jsonb类型,直接去掉::json转换即可。

SQL Server(2016+版本)

SQL Server 2016及以后版本支持JSON函数,用JSON_VALUE指定路径提取值:

SELECT
    Company,
    JSON_VALUE(User, '$[0].Name') AS User_1_name,
    JSON_VALUE(User, '$[0].email') AS User_1_email,
    JSON_VALUE(User, '$[0].password') AS User_1_password,
    JSON_VALUE(User, '$[1].Name') AS User_2_name,
    JSON_VALUE(User, '$[1].email') AS User_2_email,
    JSON_VALUE(User, '$[1].password') AS User_2_password
FROM your_table_name;

补充说明

上面的方案是针对你示例中每个公司固定2个用户的情况,如果未来用户数量不固定(可能多/少于2个),这种固定列的写法就不太灵活了,那时需要结合动态SQL或者行转列的逻辑来处理,但目前来看你的需求用上面的语句完全可以满足。

内容的提问来源于stack exchange,提问作者Vivo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:37:41