REGEXP_LIKE和REGEXP_INSTR使用哪一个

时间:2013-06-24 05:37:06

标签: regex oracle

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

我应该使用regexp_instr吗?

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

4 个答案:

答案 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_LIKEconditionREGEXP_INSTRfunction

您通常使用WHERE子句和a few other places中的条件。您可以在任何表达式中使用函数。

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