-3

我有以下使用的代码regexp_like(),但是当我将 exp: 写入 时^[0-5]\.[\d]+$regexp_like()它不会返回正确的结果。

我应该使用regexp_instr吗?

我如何知道该使用哪一个?

4

4 回答 4

1

它们是具有不同目标的两种不同功能,因此您应该使用最适合您情况的一种。

  • REGEXP_LIKE()返回一个布尔值,并且只能在 WHERE 子句中使用,当您想要返回匹配条件的行时使用它。

  • REGEXP_INSTR()返回一个整数,表示匹配子字符串的开始或结束。它不必在 WHERE 子句中使用。

    本质上,where regexp_instr(...,...) > 0它与 REGEXP_LIKE 相同,但可以在更多情况下使用。

请阅读两者的链接文档。

至于为什么你的条件没有返回正确的结果,那是因为你的正则表达式没有充分描述你想要返回的行。

于 2013-06-24T07:41:27.197 回答
0

在 Oracle中, REGEXP_LIKE是一个条件,而REGEXP_INSTR是一个函数

您通常在WHERE子句和其他一些地方使用条件。您可以在任何表达式中使用函数。

如果没有更多细节,很难判断哪一个更适合您的情况,但最终它们都完全相同。根据上面的链接,结果的表示当然是不同的,你必须考虑到这一点。

于 2013-06-24T06:10:06.047 回答
0

这里只是一个猜测,但我认为regexp_like已经锚定在开始和结束,否则regexp_instr将是多余的。

于 2013-06-24T05:48:22.307 回答
0

我不确定您的正则表达式引擎是否支持\d字符类。尝试使用这些语法(使用 regexp_like)

^[0-5]\.[0-9]+$

或者

^[0-5]\.[[:digit:]]+$
于 2013-06-24T06:03:14.267 回答