Oracle正则表达式消除了所有重复的单词

时间:2015-08-06 21:32:40

标签: regex oracle select

我想删除逗号分隔列表中的所有重复字词。

我试过了:

SELECT 
  REGEXP_REPLACE(
    '1234,234,1234,1234,928,1234,123,1234,Abcd,1234,1234',
    '([^,\w]+)(,[ ]*[\1])+') AS r
FROM dual

它应该返回

1234,234,928,123,Abcd

但实际上它会返回

1234,234,234,234

还尝试使用([^,\w]+)(,[ ]*\1)+,但'1234,1234,1234'会返回(null)

还尝试了

SELECT 
  REGEXP_REPLACE(
    '1234,234,1234,1234,928,1234,123,1234,Abcd,1234,1234',
    '([^,\w]+)(,[ ]*[\1])+', '\1') AS r
FROM dual

以及更换后,甚至' \ 1 \ 2'但他们都没有给出理想的结果。

请,任何想法?

1 个答案:

答案 0 :(得分:0)

我知道这并不是你要求的方法,但它仍然可以达到同样的结果:

WITH DATA AS
  ( SELECT '1234,234,1234,1234,928,1234,123,1234,Abcd,1234,1234' str FROM dual)
SELECT DISTINCT trim(regexp_substr(str, '[^,]+', 1, LEVEL)) str
FROM DATA
CONNECT BY instr(str, ',', 1, LEVEL - 1) > 0