【问题标题】:Using regexp_replace string使用 regexp_replace 字符串
【发布时间】:2017-01-11 04:43:50
【问题描述】:

我正在尝试使用 oracle REGEXP_REPLACE 函数来删除重复的字符。

字符串如下所示:

("ABC","DEF,,,,",,,"111",,,"HI")

输出应该是:

("ABC","DEF,,,,","111","HI")

为此,我尝试了以下代码

SELECT REGEXP_REPLACE(("ABC","DEF,,,,",,,"111",,,"HI")','[,]{2,}','(,))
FROM DUAL;

这是删除双引号内的逗号。有人可以告诉我如何删除不在双引号中的重复逗号吗?

【问题讨论】:

  • 终极目标是什么?也许有更好的方法来获得最终结果。即这看起来您正在从有 NULL 列(连续逗号)的电子表格中获取数据。如果您最终通过 sqlldr 将其加载到表中,如果您只关心字段 1、2、5 和 8,则可以在控制文件中进行处理。
  • 最终目标是删除输入字符串中双引号之外出现超过 2 次的重复逗号或某些特殊字符。这是我从 UI 中得到的。再说一个例子。输入字符串将为“AAAA123!!!!”、“BBB”、!!!!!、“CAAD”、!!!)。输出将是“AAAAA123!!!!”、“BBB”、!、“CADD”、!)。我想使用 regexp_replace 字符串来实现这一点。请让我知道这可能吗?提前致谢。
  • 重复字符在哪里引入?用户界面还是用户?在 UI 下从数据库中提取数据的程序?清理后的数据如何处理?请分享大局,这可能有助于了解大局以提供更好的解决方案。

标签: regex oracle regexp-replace


【解决方案1】:
SELECT LISTAGG('"'||test||'"', ',')
     WITHIN GROUP (order by r) "t" from
(select rownum r ,regexp_substr(q'"ABC","DEF,,,,",,,"111",,,"HI"','[^"]+', 1, level) test from dual
connect by regexp_substr(q'"ABC","DEF,,,,",,,"111",,,"HI"', '[^"]+', 1, level) is not null)
where regexp_count( test, ',' ) != LENGTH(test)

这行得通。

【讨论】:

  • 非常感谢。让我尝试一下,还有没有办法直接使用正则表达式替换功能来实现上述标准。提前致谢。
猜你喜欢
  • 2016-06-07
  • 1970-01-01
  • 2018-07-09
  • 2019-08-24
  • 2014-11-17
  • 2013-09-08
  • 2018-11-23
  • 2018-07-20
  • 1970-01-01
相关资源
最近更新 更多