Oracle REGEXP_LIKE和\ A和\ Z的含义

时间:2011-07-08 10:21:25

标签: sql regex oracle stored-procedures

我在Oracle存储过程中遇到了与以下类似的代码:

SELECT * FROM hr.employees WHERE REGEXP_LIKE(FIRST_NAME, '\A'||:iValue||'\Z', 'c');

我不确定\ A和\ Z是做什么的。

从我可以从Oracle文档中收集到的内容,我认为它们只是简单地抑制了iValue参数中特殊字符的含义。如果是这样,上述内容必须等同于

SELECT * FROM hr.employees WHERE FIRST_NAME=:iValue;

任何人都可以证实吗?根据经验,似乎就是这种情况。

我认为过去他们想要不区分大小写的搜索,所以'c'之前就是'i'。所以在这种情况下我们不再需要使用REGEXP_LIKE函数了,可以用等号替换它。

2 个答案:

答案 0 :(得分:1)

  • \A匹配字符串开头的位置。
  • \Z匹配字符串末尾的换行符之前字符串末尾的位置。
  • \z匹配字符串末尾的位置。

这些与多线模式无关,与^$不同。

示例:

foo\Zfoo\n匹配,但foo\z 匹配foo\n

请参阅Oracle reference


如果||用于字符串连接,则它与简单字符串比较不同,因为它允许您使用正则表达式。 (另外我不确定Oracle在使用=时如何处理区分大小写,MySQL在比较字符串时默认忽略大小写。)

答案 1 :(得分:0)

\A匹配输入的开头。
\Z匹配输入的结尾。

查看regular-expressions.info,这是一个很棒的正则表达式资源