我有以下使用regexp_like()
的代码,但是当我将exp:^[0-5]\.[\d]+$
写入regexp_like()
时,它并没有返回正确的结果。
我应该使用regexp_instr
吗?
我如何知道,使用哪一个?
答案 0 :(得分:1)
它们是具有不同目标的两种不同功能,因此您应该使用最适合您情况的功能。
REGEXP_LIKE()
返回一个布尔值,只能在WHERE子句中使用,当你想要返回符合条件的行时,它会被使用。
REGEXP_INSTR()
返回一个整数,表示匹配的子字符串的开头或结尾。它不必在WHERE子句中使用。
基本上,where regexp_instr(...,...) > 0
与REGEXP_LIKE相同,但可以在更多情况下使用。
请阅读两者的链接文档。
至于为什么你的条件没有返回正确的结果,这是因为你的正则表达式没有充分描述你想要返回的行。
答案 1 :(得分:0)
这里只是一个猜测,但我认为regexp_like
已经锚定在开头和结尾,否则regexp_instr
将是多余的。
答案 2 :(得分:0)
我不确定您的正则表达式引擎是否支持\d
字符类。请尝试使用这些语法(使用regexp_like):
^[0-5]\.[0-9]+$
或
^[0-5]\.[[:digit:]]+$
答案 3 :(得分:0)
在Oracle中REGEXP_LIKE是condition而REGEXP_INSTR是function。
您通常使用WHERE
子句和a few other places中的条件。您可以在任何表达式中使用函数。
如果没有更多详细信息,很难说哪一个更适合您的情况,但最终两者都完全相同。根据上面的链接,结果的表示当然是不同的,你必须考虑到这一点。