Ответ 1
МС-SQL; Если вы хотите, чтобы символ %
в search_criteria
in использовался как буквальный символ, а не как шаблон, выведите его на [%]
;
.... where name like '%' + replace(search_criteria, '%', '[%]') + '%'
У меня есть SQL-запрос, как показано ниже.
Select * from table
where name like '%' + search_criteria + '%'
Если search_criteria = 'abc', он вернет данные, содержащие xxxabcxxxx
, что хорошо.
Но если мой search_criteria = 'abc%', он все равно вернет данные, содержащие xxxabcxxx
, что не должно быть.
Как мне справиться с этой ситуацией?
МС-SQL; Если вы хотите, чтобы символ %
в search_criteria
in использовался как буквальный символ, а не как шаблон, выведите его на [%]
;
.... where name like '%' + replace(search_criteria, '%', '[%]') + '%'
Самое простое решение - отказаться от "всего":
Select *
from table
where charindex(search_criteria, name) > 0
Я предпочитаю charindex над подобным. Исторически сложилось так, что у нее была более высокая производительность, но я не уверен, что теперь она имеет большое значение.
Используйте предложение escape:
select *
from (select '123abc456' AS result from dual
union all
select '123abc%456' AS result from dual
)
WHERE result LIKE '%abc\%%' escape '\'
Результат
123abc%456
Вы можете установить свой escape-символ на все, что хотите. В этом случае используется значение по умолчанию '\'. Сбежавший '\%' становится литералом, второй "%" не экранируется, поэтому снова происходит дикая карта.
Чтобы избежать символа в sql, вы можете использовать !
:
ПРИМЕР - ИСПОЛЬЗОВАНИЕ ХАРАКТЕРОВ ESCAPE
Важно понять, как "Escape Characters" при сопоставлении с образцом. Эти примеры относятся конкретно к экранирующим символам в Oracle.
Предположим, вы хотели найти символ% или _ в состоянии SQL LIKE. Вы можете сделать это, используя символ Escape.
Обратите внимание, что вы можете определять только escape-символ как один символ (длина 1).
Например:
SELECT *
FROM suppliers
WHERE supplier_name LIKE '!%' escape '!';
Этот пример условия SQL LIKE идентифицирует! символ как escape-символ. Это выражение вернет всех поставщиков, чье имя%.
Вот еще один более сложный пример использования escape-символов в условии SQL LIKE.
SELECT *
FROM suppliers
WHERE supplier_name LIKE 'H%!%' escape '!';
Этот пример условия SQL LIKE возвращает всех поставщиков, чье имя начинается с H и заканчивается на%. Например, он вернет значение, например "Hello%".
Вы также можете использовать escape-символ с символом _ в условии SQL LIKE.
Например:
SELECT *
FROM suppliers
WHERE supplier_name LIKE 'H%!_' escape '!';
Этот пример условия SQL LIKE возвращает всех поставщиков, имя которых начинается с H и заканчивается на _. Например, он вернет значение, например "Hello _".
Ссылка: sql/like
Select * from table where name like search_criteria
если вы ожидаете, что пользователь добавит свои собственные подстановочные знаки...
Вам нужно сбежать от него: во многих базах данных это делается с помощью обратного слэша, \%
.
Итак, abc
становится abc\%
.
Ваш язык программирования будет иметь функцию, специфичную для базы данных, для этого. Например, PHP имеет mysql_escape_string() для MySQL.
Побег знака процента \%
, чтобы сделать его частью вашего значения сравнения.
Может быть, эта помощь:)
DECLARE @SearchCriteria VARCHAR(25)
SET @SearchCriteria = 'employee'
IF CHARINDEX('%', @SearchCriteria) = 0
BEGIN
SET @SearchCriteria = '%' + @SearchCriteria + '%'
END
SELECT *
FROM Employee
WHERE Name LIKE @SearchCriteria