я заметил, что производительность для фильтра в Oracle может быть очень разным в зависимости от написать ли выЛюбая функция, ускользающая от строки для литерального поиска LIKE?
WHERE col LIKE 'abc%'
или
WHERE SUBSTR(col,1,3) = 'abc'
Итак, я хотел бы всегда использовать LIKE запросов. Но мой префикс может содержать любой символ ASCII, и поэтому мне нужно избежать %
, _
и сам escape-символ.
Я мог бы использовать 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) || '%'
, или мне нужно написать ее самостоятельно?
'pat', кажется, откуда-то еще. Измените его, прежде чем передавать его в запрос. –