首页 > 解决方案 > 我有一个 SQL 查询,需要在 oracle 中以特定格式写入输出

问题描述

我有一张表,其结构是 test(id , col1,col2)

现在我想得到 justcol1col2in combination 的输出。例如表中的数据是 -

在此处输入图像描述

输出应该是 -->a,b,c,d,e,f

标签: sqloracle

解决方案


当结果字符串太长,需要 CLOB 输出时,这里有一个 hack 可能会起作用。(“黑客”是一种被认为是 100% 正确的解决方案,但以不打算使用的方式使用某些工具。)黑客是为了使用json_arrayagg,并向 Oracle “撒谎”,并指出输入是format json为了不执行转义。

由于它使用 json 函数,因此只能在 Oracle 12.1 及更高版本中使用。

with
  prep (lst) as (
    select json_arrayagg(col1 || ',' || col2 format json
                         order by id returning clob)
    from   your_table
  )
select substr(lst, 2, length(lst) - 2) as result
from   prep
;

需要最后一个查询,因为 json 数组将包含一对方括号(即数组的 json 表示法)。该substr函数从 CLOB 中删除第一个和最后一个字符。我更喜欢这个ltrimand ,因为andrtrim中的字符串可能已经包含括号,并且不应该被删除;只有第一个和最后一个字符(a [ 和 a ])应该从 json 数组中删除。col1col2


推荐阅读