Подтвердить что ты не робот

Запрос SQL "LIKE" с использованием "%", где критерии поиска содержат "%",

У меня есть SQL-запрос, как показано ниже.

Select * from table 
where name like '%' + search_criteria + '%' 

Если search_criteria = 'abc', он вернет данные, содержащие xxxabcxxxx, что хорошо.

Но если мой search_criteria = 'abc%', он все равно вернет данные, содержащие xxxabcxxx, что не должно быть.

Как мне справиться с этой ситуацией?

4b9b3361

Ответ 1

МС-SQL; Если вы хотите, чтобы символ % в search_criteria in использовался как буквальный символ, а не как шаблон, выведите его на [%];

.... where name like '%' + replace(search_criteria, '%', '[%]') + '%'

Ответ 2

Самое простое решение - отказаться от "всего":

Select * 
from table
where charindex(search_criteria, name) > 0

Я предпочитаю charindex над подобным. Исторически сложилось так, что у нее была более высокая производительность, но я не уверен, что теперь она имеет большое значение.

Ответ 3

Используйте предложение 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 LIKE

Ответ 4

Чтобы избежать символа в 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

Ответ 5

Select * from table where name like search_criteria

если вы ожидаете, что пользователь добавит свои собственные подстановочные знаки...

Ответ 6

Вам нужно сбежать от него: во многих базах данных это делается с помощью обратного слэша, \%.

Итак, abc становится abc\%.

Ваш язык программирования будет иметь функцию, специфичную для базы данных, для этого. Например, PHP имеет mysql_escape_string() для MySQL.

Ответ 7

Побег знака процента \%, чтобы сделать его частью вашего значения сравнения.

Ответ 8

Может быть, эта помощь:)

DECLARE @SearchCriteria VARCHAR(25)
SET  @SearchCriteria = 'employee'
IF CHARINDEX('%', @SearchCriteria) = 0
BEGIN
SET @SearchCriteria = '%' + @SearchCriteria + '%'
END
SELECT * 
FROM Employee
WHERE Name LIKE @SearchCriteria