我注意到,在Oracle的过滤性能可以根据你是否写任何函数转义文字LIKE搜索字符串?
WHERE col LIKE 'abc%'
或
WHERE SUBSTR(col,1,3) = 'abc'
所以,我想总是喜欢查询使用是非常不同的。但是我的前缀可以包含任何ASCII字符,因此我必须转义%
,_
和转义字符本身。
我可以用一个REGEXP_REPLACE对于类似的事情:
WHERE col LIKE REGEXP_REPLACE(pat, '([%_\\])', '\\\1') || '%' ESCAPE '\'
我也做一个三重REPLACE:
WHERE col LIKE REPLACE(REPLACE(REPLACE(pat,'\','\\'),'%','\%'),'_','\_') || '%' ESCAPE '\'
两种方式都是痛苦的家伙之后会读取它。是否有替代功能,风格为WHERE begins_with(col, pat) > 0
或WHERE col LIKE like_literal(pat) || '%'
或者我必须自己写吗?
'pat'似乎是从别的地方来了。在将其传递给查询之前对其进行修改。 –