我在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函数了,可以用等号替换它。
答案 0 :(得分:1)
\A
匹配字符串开头的位置。\Z
匹配字符串末尾的换行符之前或字符串末尾的位置。\z
匹配字符串末尾的位置。 这些与多线模式无关,与^
和$
不同。
示例:
foo\Z
与foo\n
匹配,但foo\z
匹配foo\n
。
请参阅Oracle reference。
如果||
用于字符串连接,则它与简单字符串比较不同,因为它允许您使用正则表达式。 (另外我不确定Oracle在使用=
时如何处理区分大小写,MySQL在比较字符串时默认忽略大小写。)
答案 1 :(得分:0)
\A
匹配输入的开头。
\Z
匹配输入的结尾。
查看regular-expressions.info,这是一个很棒的正则表达式资源