【问题标题】:PL SQL comma delimited to JSON array conversionPL SQL逗号分隔到JSON数组转换
【发布时间】:2021-10-30 16:01:56
【问题描述】:

我在一列中有值,用逗号分隔。

Col1

a,b,c,d

我想把它转换成 JSON 数组。我知道 JSON_ARRAY 函数从 12.2 开始在 PL/SQL 中可用。但是 JSON_ARRAY 将多列转换为数组。我在单列中有值。

输出:["a","b","c","d"]

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: sql json oracle plsql oracle12c


【解决方案1】:

您可以使用JSON_ARRAYAGG() 代替JSON_ARRAY() 函数而不使用PL/SQL,在通过逗号分割将这些字母转换为逐行样式后,例如

WITH t(id,col1) AS
(
 SELECT 1,'a,b,c,d' FROM dual UNION ALL
 SELECT 2,'d,e,f,g,h,i' FROM dual
), t2 AS
(
 SELECT REGEXP_SUBSTR(col1,'[^,]+',1,level) AS col, id
   FROM t
CONNECT BY level <= REGEXP_COUNT(col1,',')+1
    AND PRIOR SYS_GUID() IS NOT NULL
    AND PRIOR col1 = col1
)    
SELECT id, JSON_ARRAYAGG(col ORDER BY col RETURNING VARCHAR2(100)) As "JSON value"
  FROM t2
 GROUP BY id 

Demo

【讨论】:

    【解决方案2】:

    只需使用替换:

    SELECT '["'
           ||REPLACE(REPLACE(col1,'"','\"'),',','","')
           ||'"]' AS json_value
    FROM   table_name;
    

    或者,在 PL/SQL 中:

    DECLARE
      col1 VARCHAR2(50) := 'a,b,c,d';
      json VARCHAR2(50);
    BEGIN
     json := '["'||REPLACE(REPLACE(col1,'"','\"'),',','","')||'"]';
     DBMS_OUTPUT.PUT_LINE(json);
    END;
    /
    

    db小提琴here

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 2019-12-30
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2012-09-29
      相关资源
      最近更新 更多