我注意到Oracle中过滤器的性能可能会有很大差异,具体取决于您是否编写
WHERE col LIKE 'abc%'
或
WHERE SUBSTR(col,1,3) = 'abc'
所以,我想总是使用LIKE查询。但我的前缀可以包含任何ASCII字符,因此我必须转义%
,_
和转义字符本身。
我可以使用regexp_replace做类似的事情:
WHERE col LIKE REGEXP_REPLACE(pat, '([%_\\])', '\\\1') || '%' ESCAPE '\'
我也可以做三重替换:
WHERE col LIKE REPLACE(REPLACE(REPLACE(pat,'\','\\'),'%','\%'),'_','\_') || '%' ESCAPE '\'
对于之后会阅读它的人来说,这两种方式都很痛苦。是否有替代函数,格式为WHERE begins_with(col, pat) > 0
或WHERE col LIKE like_literal(pat) || '%'
,还是我必须自己编写?
答案 0 :(得分:1)
您可以确定自己的转义字符。
WHERE col LIKE 'A\_B%' ESCAPE '\';
在模式中,转义字符位于下划线(_)之前。这导致Oracle按字面解释下划线,而不是作为特殊模式匹配字符。
请阅读以下链接 https://docs.oracle.com/cd/B12037_01/server.101/b10759/conditions016.htm