【问题标题】:Oracle Regexp_replace stringOracle Regexp_replace 字符串
【发布时间】:2018-07-09 11:46:33
【问题描述】:

假设我有以下字符串:

notNull(devhx_8_other2_name_2)  AND   notNull(devhx_8_other2_amt)

如何使用regexp_replace 将其更改为:

(devhx_8_other2_name_2) is not null AND (devhx_8_other2_amt) is not null

【问题讨论】:

  • 到目前为止您尝试过什么?此外,您的字符串中可以有多少个约束?总是2?你甚至可以处理 OR 还是只处理 AND?

标签: sql regex oracle regexp-replace


【解决方案1】:

使用

regexp_replace(col, 'notNull(\([^)]+\))', '\1 is not null', 1, 0)

这会查找 'notNull' 后跟一个左括号、其他字符和一个右括号。它用包含括号的字符串替换它,但没有'notNull'并附加'is not null'。

【讨论】:

  • 谢谢大家!有时字符串显示“notNull”,有时显示“isNull”。所以我选择了这个: regexp_replace(regexp_replace(col, 'notNull(([^)]+))', '\1 is not null', 1, 0), 'isNull(([^)]+))' , '\1 为空', 1, 0)
【解决方案2】:

您可以使用该模式:

  • notNull - 匹配字符串
  • ( - 启动捕获组
  • \(.+?\) - 匹配左括号,然后匹配一个或多个字符,但尽可能少,直到匹配右括号
  • ) - 捕获组结束。

然后用\1 is not null 替换它,这将用\1 替换第一个捕获组中匹配的值。像这样:

SELECT REGEXP_REPLACE(
         your_column,
         'notNull(\(.+?\))',
         '\1 is not null'
       )
FROM   your_table

【讨论】:

    【解决方案3】:

    假设你的字符串总是你显示的格式,你不需要正则表达式:

    replace( replace( yourString, ')', ') is not null '), 'notNull', '')
    

    【讨论】:

      【解决方案4】:

      使用以下 regexp_replace 函数:

      regexp_replace(regexp_replace(string_name,"notNull",""),"')","') is not null")
      

      在这里,我将“notNull”替换为非空格,即“”,然后将右括号,即“)”替换为右括号、空格和文本“不为空”。

      【讨论】:

      • 你需要在外部替换中转义'('
      • 字符串文字用单引号括起来 - 在 oracle 中,双引号用于在列/表/其他数据库对象的名称中强制区分大小写。此外,正则表达式中的转义字符是 \ 而不是 '
      猜你喜欢
      • 2018-07-20
      • 2021-12-29
      • 2012-09-25
      • 2016-06-07
      • 1970-01-01
      • 2017-01-11
      • 2021-03-22
      • 2015-08-09
      • 2013-10-25
      相关资源
      最近更新 更多