我注意到,在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'似乎是從別的地方來了。在將其傳遞給查詢之前對其進行修改。 –