我必须将表中的35个列连接成一个字符串。列中的数据可以是不同的重复情况,如下所示。
COL_1
apple | ORANGE | APPLE | Orange
COL_2
GRAPE | grape | Grape
每列中的数据是管道分隔的,我试图通过用'|'
分隔来连接每一列。我希望最终输出为"apple | orange | grape"
(全部小写都可以)
但目前我正在
apple | ORANGE | APPLE | Orange | GRAPE | grape | Grape
我当前的SQL是
SELECT COL_1 || '|' || COL_2 from TABLE_X;
有人可以向我解释如何从每列中提取唯一值吗?这将大大减少我的字符串长度。我当前的SQL超过了Oracle的4000个字符限制。
答案 0 :(得分:0)
我试过这个
WITH test AS
( SELECT 'Test | test | Test' str FROM dual
)
SELECT *
FROM
(SELECT DISTINCT(LOWER(regexp_substr (str, '[^ | ]+', 1, rownum))) split
FROM test
CONNECT BY level <= LENGTH (regexp_replace (str, '[^ | ]+')) + 1
)
WHERE SPLIT IS NOT NULL;
此查询仅生成&#39; test&#39;
分割由&#39;分隔的字符串后它产生的唯一值的一些方法。 | &#39;在一列中。但是在单个SQL查询中为35个以上的列执行此操作将非常麻烦。有人可以提出更好的方法吗?