Чтобы экранировать специальные символы в выражении LIKE, перед ними необходимо использовать экранирующий символ. Вы можете выбрать, какой escape-символ использовать с ключевым словом ESCAPE. ( MSDN Ref )
Например, это экранирует символ%, используя \ в качестве escape-символа:
select * from table where myfield like '%15\% off%' ESCAPE '\'
Если вы не знаете, какие символы будут в вашей строке, и не хотите рассматривать их как символы подстановки, вы можете использовать префикс всех символов подстановки с помощью escape-символа, например:
set @myString = replace(
replace(
replace(
replace( @myString
, '\', '\\' )
, '%', '\%' )
, '_', '\_' )
, '[', '\[' )
(Обратите внимание, что вы также должны экранировать свой escape-символ, и убедитесь, что это внутренний replace
, чтобы вы не избегали тех, которые добавлены из других операторов replace
). Тогда вы можете использовать что-то вроде этого:
select * from table where myfield like '%' + @myString + '%' ESCAPE '\'
Также не забудьте выделить больше места для вашей переменной @myString, так как она станет больше при замене строки.