任何为字面LIKE搜索转义字符串的函数?

时间:2016-11-23 16:57:38

标签: sql oracle

我注意到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) > 0WHERE col LIKE like_literal(pat) || '%',还是我必须自己编写?

1 个答案:

答案 0 :(得分:1)

您可以确定自己的转义字符。

WHERE col LIKE 'A\_B%' ESCAPE '\';

在模式中,转义字符位于下划线(_)之前。这导致Oracle按字面解释下划线,而不是作为特殊模式匹配字符。

请阅读以下链接 https://docs.oracle.com/cd/B12037_01/server.101/b10759/conditions016.htm