Выйдите из строки в SQL Server так, чтобы было безопасно использовать в ПОДОБНОМ выражении

74
задан embedded.kyle 22 April 2015 в 14:45
поделиться

4 ответа

Для выхода из специальных символов в ПОДОБНОМ выражении, Вы снабжаете префиксом их символ ESC. Вы добираетесь для выбора который символ Escape использовать с ключевым словом ESCAPE. ( MSDN Касательно )

, Например, это выходит из символа %, с помощью \как символ 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 переменной, поскольку это станет более длинным со строковой заменой.

90
ответ дан Rory 24 November 2019 в 11:59
поделиться

Вы определяете символ ESC. Документация здесь:
http://msdn.microsoft.com/en-us/library/ms179859.aspx

4
ответ дан Corey Trager 24 November 2019 в 11:59
поделиться

Вы хотите искать строки, которые включают символ ESC? Например, Вы хотите это:

select * from table where myfield like '%10%%'.

, Где Вы хотите искать все поля с 10%? Если это так, тогда можно использовать пункт ESCAPE, чтобы определить символ ESC и выйти из подстановочного символа.

select * from table where myfield like '%10!%%' ESCAPE '!'
3
ответ дан Vincent Ramdhanie 24 November 2019 в 11:59
поделиться

Была аналогичная проблема (с использованием NHibernate, поэтому ключевое слово ESCAPE было бы очень сложно) и решила ее с помощью скобок. . Таким образом, ваш образец станет

WHERE ... LIKE '%aa[%]bb%'

Если вам нужно доказательство:

create table test (field nvarchar(100))
go
insert test values ('abcdef%hijklm')
insert test values ('abcdefghijklm')
go
select * from test where field like 'abcdef[%]hijklm'
go
18
ответ дан 24 November 2019 в 11:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: