Sql 有没有函数为类似文本的搜索转义字符串?

Sql 有没有函数为类似文本的搜索转义字符串?,sql,oracle,Sql,Oracle,我注意到Oracle中过滤器的性能可能会因您是否编写 WHERE col LIKE 'abc%' 或 因此,我希望始终使用like查询。但是,我的前缀可以包含任何ASCII字符,因此我必须转义%,\uuu,以及转义字符本身 我可以使用regexp_替换类似的内容: WHERE col LIKE REGEXP_REPLACE(pat, '([%_\\])', '\\\1') || '%' ESCAPE '\' 我还可以做三重替换: WHERE col LIKE REPLACE(REPLAC

我注意到Oracle中过滤器的性能可能会因您是否编写

WHERE col LIKE 'abc%'

因此,我希望始终使用like查询。但是,我的前缀可以包含任何ASCII字符,因此我必须转义
%
\uuu
,以及转义字符本身

  • 我可以使用regexp_替换类似的内容:

    WHERE col LIKE REGEXP_REPLACE(pat, '([%_\\])', '\\\1') || '%' ESCAPE '\'
    
  • 我还可以做三重替换:

    WHERE col LIKE REPLACE(REPLACE(REPLACE(pat,'\','\\'),'%','\%'),'_','\_') || '%' ESCAPE '\'
    

这两种方式都会让事后阅读的人感到痛苦。是否有另一个函数,其样式为
WHERE start_(col,pat)>0
,或
WHERE col LIKE_literal(pat)| |“%”
或我必须自己编写它?

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

WHERE col LIKE 'A\_B%' ESCAPE '\';
在模式中,转义字符位于下划线(\)之前。这导致Oracle逐字解释下划线,而不是将其解释为特殊的模式匹配字符

WHERE col LIKE 'A\_B%' ESCAPE '\';
请阅读以下链接
pat
似乎来自其他地方。在将其传递到查询之前对其进行修改。您的意思是
WHERE col像'A\\u B%'ESCAPE'\'?@Matthewmpeak,是的,他做了,这是一个降价缩进问题。我已经知道可以选择转义字符。我的问题是,如果我想删除
%
\
的任何特殊含义,而不展开自己的三重替换或regexp替换,那么是否有一个方便的函数可以正确地转义文字字符串。