Способы экранирования одинарных кавычек в команде SQL "LIKE" - PullRequest
5 голосов
/ 17 августа 2010

Каковы различные способы ESCAPE одинарные кавычки (') в команде SQL LIKE?

Один из способов - поставить две одинарные кавычки, когда вам нужно экранировать одну кавычку.

Можете ли вы, люди, предложить что-нибудь?

Базы данных: SQL Server 2005 и Oracle 10g

Ответы [ 4 ]

12 голосов
/ 17 августа 2010

У вас уже есть ответ.Вы должны использовать две одинарные кавычки:

select * from table where field like '%''something''%'
2 голосов
/ 17 августа 2010

Две одинарные кавычки - лучшее решение.

В качестве альтернативы, вы можете использовать CHAR(39) для обозначения одной кавычки.

UPDATE Employee SET LastName = 'O' +  CHAR(39) + 'Brien' 
WHERE ID=1;
2 голосов
/ 17 августа 2010

Лучший способ - привязать параметр с помощью ADO или ADO.NET.

Как (пример в C # с ADO.NET):

SqlCommand x = new SqlCommand(sqlConnection, @"select * from table where col like '%'+@para1+'%'");
x.parameters.add(new SqlParameter("@para1",sqltype.varchar,100)).value = "this is a' test";

В SQL Server 2005 вы избегаете одиночной кавычки (') с двойной одинарной кавычкой (' '), если не хотите связывать:

select * from table where col like '%this is a'' test%'
1 голос
/ 17 августа 2010

Существует также метод "Q-quote":

select * from mytable where text like q'#%Here's some text%#';

Это доступно с версии Oracle 10.2.

Я использовал символ '#' в качестве разделителя кавычек, но выможет использовать практически любой символ, который не будет отображаться в строке (есть несколько исключений, например, пробел).

В простом примере, подобном приведенному выше, я бы, наверное, этого не сделал.Я бы просто удвоил одинарные кавычки, но это очень удобно при построении больших динамических операторов SQL, которые содержат много строковых литералов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...