Sql 有没有函数为类似文本的搜索转义字符串?
我注意到Oracle中过滤器的性能可能会因您是否编写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
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替换,那么是否有一个方便的函数可以正确地转义文字字符串。