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

如何在PL/SQL中将单列逗号分隔值转换为JSON数组

实现方案(Oracle 12.2+ 适用)

方案1:通用稳妥方案(支持特殊字符自动转义)

核心思路是先将逗号分隔的字符串拆分为单行单个值,再通过JSON_ARRAYAGG函数聚合为标准JSON数组,该方法会自动处理值中的双引号、反斜杠等JSON特殊字符,不会出现格式错误。
示例代码如下:

SELECT 
  JSON_ARRAYAGG(TRIM(split_val) ORDER BY seq) AS result_json
FROM 
  your_table t,
  -- 拆分逗号分隔字符串为行,seq保留原始元素顺序
  (SELECT 
     LEVEL AS seq,
     REGEXP_SUBSTR(t.Col1, '[^,]+', 1, LEVEL) AS split_val
   FROM DUAL
   CONNECT BY LEVEL <= REGEXP_COUNT(t.Col1, ',') + 1)
WHERE 
  t.Col1 IS NOT NULL
-- 按原表主键分组,处理多行数据时避免串值,单条数据转换可删除该子句
GROUP BY t.primary_key_col, t.Col1;

如果你的环境支持JSON_TABLE,可以用更简洁的拆分写法:

SELECT 
  JSON_ARRAYAGG(TRIM(value) ORDER BY rownum) AS result_json
FROM 
  your_table t,
  JSON_TABLE(
    '["' || REPLACE(t.Col1, ',', '","') || '"]',
    '$[*]' COLUMNS (value VARCHAR2(4000) PATH '$')
  )
WHERE 
  t.Col1 IS NOT NULL
-- 多数据行场景保留分组,单条转换可删除
GROUP BY t.primary_key_col, t.Col1;

方案2:快速字符串拼接方案(仅适用于数据干净的场景)

如果确认Col1存储的所有分隔元素都不包含双引号、逗号、反斜杠等JSON特殊字符,可以直接用字符串替换实现,性能更高:

SELECT 
  '["' || REPLACE(Col1, ',', '","') || '"]' AS result_json
FROM your_table
WHERE Col1 IS NOT NULL;

注意:该方案没有特殊字符转义逻辑,数据不符合前提条件时会生成非法JSON,不建议生产环境通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:27:04