【问题标题】:How to remove duplicates from comma separated list by regex in Oracle but I don't want duplicates values? [duplicate]如何通过 Oracle 中的正则表达式从逗号分隔列表中删除重复项,但我不想要重复值? [复制]
【发布时间】:2018-08-07 03:08:33
【问题描述】:

我有这个字符串

ABCD1234, XYZ, ABCD1234, ABCD1234C, ABCD1234, abc, abcX, 1234U, 1234

我想要,但我不想要重复

ABCD1234, XYZ, ABCD1234C, abc, abcX, 1234U, 1234,

我正在使用下面的正则表达式

select regexp_replace (
    'ABCD1234, XYZ, ABCD1234, ABCD1234C, ABCD1234, abc, abcX, 1234U, 1234',
     '([^,]+)(,\1)+', '\1'
 ) test
from dual;

【问题讨论】:

  • 正则表达式在这里无济于事。这通常通过拆分为项目,获取唯一的出现,然后将字符串连接回来来解决。

标签: sql regex oracle regexp-replace


【解决方案1】:

试试这个,根据文章http://www.dba-oracle.com/t_extract_comma_delimited_strings_oracle_sql.html

select distinct str from
(select regexp_substr ('ABCD1234, XYZ, ABCD1234, ABCD1234C, ABCD1234, abc, abcX, 1234U, 1234', '[^, ]+',1, rownum) str 
from dual 
connect by level <= regexp_count ('ABCD1234, XYZ, ABCD1234, ABCD1234C, ABCD1234, abc, abcX, 1234U, 1234', '[^, ]+')) v;

小提琴:http://sqlfiddle.com/#!4/c858d/5

【讨论】:

  • 我仍然收到重复 ABCD1234
  • @Hardik - 抱歉,我错过了逗号后面的空格 - ", ",已修复。
  • 也更新了小提琴
  • 谢谢。它正在工作
【解决方案2】:

这是一种选择:

SQL> with test (id, col) as
  2    (select 1, 'ABCD1234, XYZ, ABCD1234, ABCD1234C, ABCD1234, abc, abcX, 1234U, 1234' from dual union
  3     select 2, '111, 222, 111, ABCX2, FFE, 222' from dual
  4    ),
  5  t_rows as
  6    (select id, regexp_substr(col, '[^, ]+', 1, column_value) col
  7     from test,
  8          table(cast(multiset(select level from dual
  9                              connect by level <= regexp_count(col, ',') + 1)
 10                              as sys.odcinumberlist))
 11    ),
 12  t_distinct as
 13    (select distinct id, col
 14     from t_rows
 15    )
 16  select id, listagg(col, ', ') within group (order by null) col
 17  from t_distinct
 18  group by id;

        ID COL
---------- --------------------------------------------------
         1 1234, 1234U, ABCD1234, ABCD1234C, XYZ, abc, abcX
         2 111, 222, ABCX2, FFE

SQL>

【讨论】:

    猜你喜欢
    • 2014-12-27
    • 2018-01-07
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 2017-04-07
    • 1970-01-01
    相关资源
    最近更新 更多