0

我必须将表中的大约 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 个字符限制。

4

1 回答 1

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;

此查询仅产生“测试”

拆分由 ' | 分隔的字符串后如何产生唯一值的一些方法 ' 在列中。但是在单个 SQL 查询中对 35+ 列执行此操作会很麻烦。有人可以提出更好的方法吗?

于 2014-05-25T22:10:29.130 回答