任何功能都可以逃脱字符串以进行字面搜索



我注意到甲骨文中的过滤器的性能可能会大不相同,具体取决于您是否写

WHERE col LIKE 'abc%'

WHERE SUBSTR(col,1,3) = 'abc'

所以,我想总是像查询一样使用。但是我的前缀可以包含任何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) || '%'是否有其他功能,或者我必须自己写?

您可以确定自己的逃生字符。

WHERE col LIKE 'A_B%' ESCAPE '';

在模式中,逃生字符先于下划线(_)。这使Oracle从字面上解释了下划线,而不是作为特殊的模式匹配字符。

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

最新更新