【问题标题】:Oracle regexp_replace default replace stringOracle regexp_replace 默认替换字符串
【发布时间】:2021-12-29 15:17:46
【问题描述】:

我有一个简单的问题我找不到答案:

这是:

regexp_replace(somecolumn, someregex) 

和下面一样吗?

regexp_replace(somecolumn, someregex, NULL) 

【问题讨论】:

  • 好问题。通常,Oracle 文档看起来像是由白痴编写的。恰当的例子 - regexp_replace 的语法图显示 replace_string 参数是可选的,但在任何地方都没有说明如果该参数被遗漏的行为是什么。您的猜测是 100% 正确的,但您不必猜测,这在文档中应该非常清楚。
  • 我同意哈哈,我问这个问题是因为我正在运行我在 oracle 项目中的一些查询,在 hsql 数据库中,并且一些 oracle 查询不起作用。我注意到 regexp_replace(somecolumn, someregex, NULL) 在 hsqldb 上不起作用,但 regexp_replace(somecolumn, someregex) 确实有效,因此我提出了问题。
  • 如果您改用空字符串,hsql 中的查询(不管是什么)会起作用吗? Oracle - 直接违反 SQL 标准 - 将空字符串视为 null;如果事情做得正确,您在“替换”中真正想要的是用空字符串替换(而不是用“未知值”替换,这或多或少是 null)。
  • 是的,它适用于空字符串!谢谢你的解释!

标签: sql oracle oracle11g regexp-replace


【解决方案1】:

是的,它们是一样的。 REPLACE 的文档更明确地说明了这种行为:

如果replacement_string 被省略或为null,则所有出现的search_string 都会被删除。

REGEXP_REPLACE 的行为方式相同。第三个参数replace_string 替换匹配模式的任何内容;如果省略或为 null,则删除字符串的所有匹配部分。

【讨论】:

  • 非常感谢您的澄清!
猜你喜欢
  • 2012-09-25
  • 2018-07-09
  • 2015-08-09
  • 2013-10-25
  • 1970-01-01
  • 2015-03-12
  • 2017-02-26
  • 1970-01-01
  • 2017-12-07
相关资源
最近更新 更多