Поиск…
Синтаксис
Wild Card с%: SELECT * FROM [table] WHERE [имя_столбца] Как «% Value%»
Wild Card with _: SELECT * FROM [table] WHERE [column_name] Как 'V_n%'
Wild Card с [charlist]: SELECT * FROM [table] WHERE [column_name] Как 'V [abc] n%'
замечания
Условие LIKE в предложении WHERE используется для поиска значений столбцов, соответствующих данному шаблону. Шаблоны формируются с использованием следующих двух подстановочных знаков
- % (Процентный символ) - Используется для представления ноль или более символов
- _ (Underscore) - используется для представления одного символа
Матч открытого шаблона
Подстановочный знак %
добавленный к началу или концу (или обеим) строки, будет содержать 0 или более символов до начала или после окончания шаблона.
Использование «%» в середине позволит совместить 0 или более символов между двумя частями шаблона.
Мы собираемся использовать эту таблицу сотрудников:
Я бы | FName | LName | Номер телефона | ManagerID | DepartmentID | Оплата труда | Дата приема на работу |
---|---|---|---|---|---|---|---|
1 | Джон | Джонсон | 2468101214 | 1 | 1 | 400 | 23-03-2005 |
2 | Софи | Amudsen | 2479100211 | 1 | 1 | 400 | 11-01-2010 |
3 | Ronny | кузнец | 2462544026 | 2 | 1 | 600 | 06-08-2015 |
4 | Джон | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
5 | Хильде | сук | 2468021911 | 2 | 1 | 800 | 01-01-2000 |
Следующие утверждения соответствуют всем записям, содержащим FName, содержащие строку «on» из таблицы Employees.
SELECT * FROM Employees WHERE FName LIKE '%on%';
Я бы | FName | LName | Номер телефона | ManagerID | DepartmentID | Оплата труда | Дата приема на работу |
---|---|---|---|---|---|---|---|
3 | R на ny | кузнец | 2462544026 | 2 | 1 | 600 | 06-08-2015 |
4 | J on | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
Следующий оператор соответствует всем записям, имеющим PhoneNumber, начиная со строки «246» от Employees.
SELECT * FROM Employees WHERE PhoneNumber LIKE '246%';
Я бы | FName | LName | Номер телефона | ManagerID | DepartmentID | Оплата труда | Дата приема на работу |
---|---|---|---|---|---|---|---|
1 | Джон | Джонсон | 246 8101214 | 1 | 1 | 400 | 23-03-2005 |
3 | Ronny | кузнец | 246 2544026 | 2 | 1 | 600 | 06-08-2015 |
5 | Хильде | сук | 246 8021911 | 2 | 1 | 800 | 01-01-2000 |
Следующий оператор соответствует всем записям с номером PhoneNumber, заканчивающимся на строку «11» от Employees.
SELECT * FROM Employees WHERE PhoneNumber LIKE '%11'
Я бы | FName | LName | Номер телефона | ManagerID | DepartmentID | Оплата труда | Дата приема на работу |
---|---|---|---|---|---|---|---|
2 | Софи | Amudsen | 24791002 11 | 1 | 1 | 400 | 11-01-2010 |
5 | Хильде | сук | 24680219 11 | 2 | 1 | 800 | 01-01-2000 |
Все записи, где 3-й символ Fname - «n» от сотрудников.
SELECT * FROM Employees WHERE FName LIKE '__n%';
(два символа подчеркивания используются до «n», чтобы пропустить первые 2 символа)
Я бы | FName | LName | Номер телефона | ManagerID | DepartmentID | Оплата труда | Дата приема на работу |
---|---|---|---|---|---|---|---|
3 | Ronny | кузнец | 2462544026 | 2 | 1 | 600 | 06-08-2015 |
4 | Джон | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
Совпадение одного символа
Чтобы расширить выбор оператора структурированного запроса (SQL-SELECT), можно использовать подстановочные знаки, знак процента (%) и подчеркивание (_).
Символ _
(подчеркивание) может использоваться в качестве подстановочного знака для любого отдельного символа в совпадении с шаблоном.
Найдите всех сотрудников, чье Fname начинается с «j» и заканчивается на «n» и имеет ровно 3 символа в Fname.
SELECT * FROM Employees WHERE FName LIKE 'j_n'
_
(подчеркивание) также может использоваться более одного раза в качестве дикой карты для соответствия шаблонам.
Например, этот шаблон будет соответствовать «jon», «jan», «jen» и т. Д.
Эти имена не будут отображаться «jn», «john», «jordan», «justin», «jason», «julian», «jillian», «joann», потому что в нашем запросе используется один знак подчеркивания, и он может пропустить точно один символ, поэтому результат должен иметь 3 символа Fname.
Например, этот шаблон будет соответствовать «LaSt», «LoSt», «HaLt» и т. Д.
SELECT * FROM Employees WHERE FName LIKE '_A_T'
Соответствие диапазону или набору
Сопоставьте любой отдельный символ в указанном диапазоне (например: [af]
) или установите (например: [abcdef]
).
Этот шаблон диапазона будет соответствовать «gary», но не «mary»:
SELECT * FROM Employees WHERE FName LIKE '[a-g]ary'
Этот шаблон будет соответствовать «mary», но не «gary»:
SELECT * FROM Employees WHERE Fname LIKE '[lmnop]ary'
Диапазон или набор можно также отменить, добавив ^
каретку перед диапазоном или установить:
Этот шаблон диапазона не будет соответствовать «gary», но будет соответствовать «mary»:
SELECT * FROM Employees WHERE FName LIKE '[^a-g]ary'
Этот шаблон набора не будет соответствовать «mary», но будет соответствовать «gary»:
SELECT * FROM Employees WHERE Fname LIKE '[^lmnop]ary'
Матч ЛЮБОЙ против ВСЕХ
Совпадение:
Необходимо совместить хотя бы одну строку. В этом примере тип продукта должен быть «электроникой», «книгами» или «видео».
SELECT *
FROM purchase_table
WHERE product_type LIKE ANY ('electronics', 'books', 'video');
Все совпадение (должно соответствовать всем требованиям).
В этом примере должны быть согласованы как «объединенное королевство», так и «лондон» и «восточная дорога» (включая вариации).
SELECT *
FROM customer_table
WHERE full_address LIKE ALL ('%united kingdom%', '%london%', '%eastern road%');
Отрицательный выбор:
Используйте ВСЕ, чтобы исключить все элементы.
В этом примере приводятся все результаты, когда тип продукта не является «электроникой», а не «книгами», а не «видео».
SELECT *
FROM customer_table
WHERE product_type NOT LIKE ALL ('electronics', 'books', 'video');
Поиск диапазона символов
Следующий оператор соответствует всем записям, имеющим FName, которое начинается с буквы от A до F из таблицы Employees .
SELECT * FROM Employees WHERE FName LIKE '[A-F]%'
Выписка ESCAPE в LIKE-запросе
Если вы реализуете текстовый поиск как LIKE
-query, вы обычно делаете это так:
SELECT *
FROM T_Whatever
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%')
Однако (помимо того, что вы не должны использовать LIKE
когда вы можете использовать полнотекстовый поиск), это создает проблему, когда кто-то вводит текст типа «50%» или «a_b».
Таким образом (вместо перехода на полнотекстовый поиск) вы можете решить эту проблему с помощью инструкции LIKE
-escape:
SELECT *
FROM T_Whatever
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%') ESCAPE '\'
Это означает, что \
теперь будет рассматриваться как символ ESCAPE. Это означает, что теперь вы можете просто добавить \
к каждому символу в строке, которую вы ищете, и результаты будут корректными, даже если пользователь вводит специальный символ, например %
или _
.
например
string stringToSearch = "abc_def 50%";
string newString = "";
foreach(char c in stringToSearch)
newString += @"\" + c;
sqlCmd.Parameters.Add("@in_SearchText", newString);
// instead of sqlCmd.Parameters.Add("@in_SearchText", stringToSearch);
Примечание. Вышеупомянутый алгоритм предназначен только для демонстрационных целей. Он не будет работать в случаях, когда 1 графема состоит из нескольких символов (utf-8). например string stringToSearch = "Les Mise\u0301rables";
Вам нужно будет сделать это для каждой графемы, а не для каждого персонажа. Вы не должны использовать вышеуказанный алгоритм, если имеете дело с азиатскими / восточно-азиатскими / южноазиатскими языками. Вернее, если вам нужен правильный код для начала, вы должны просто сделать это для каждого graphemeCluster.
См. Также ReverseString, вопрос интервью с C #
Подстановочные знаки
подстановочные символы используются с оператором SQL LIKE. Подстановочные знаки SQL используются для поиска данных в таблице.
Подстановочные знаки в SQL:%, _, [charlist], [^ charlist]
% - заменить ноль или более символов
Eg: //selects all customers with a City starting with "Lo"
SELECT * FROM Customers
WHERE City LIKE 'Lo%';
//selects all customers with a City containing the pattern "es"
SELECT * FROM Customers
WHERE City LIKE '%es%';
_ - заменить один символ
Eg://selects all customers with a City starting with any character, followed by "erlin"
SELECT * FROM Customers
WHERE City LIKE '_erlin';
[charlist] - устанавливает и диапазоны символов для соответствия
Eg://selects all customers with a City starting with "a", "d", or "l"
SELECT * FROM Customers
WHERE City LIKE '[adl]%';
//selects all customers with a City starting with "a", "d", or "l"
SELECT * FROM Customers
WHERE City LIKE '[a-c]%';
[^ charlist] - Соответствует только символу, не указанному в скобках
Eg://selects all customers with a City starting with a character that is not "a", "p", or "l"
SELECT * FROM Customers
WHERE City LIKE '[^apl]%';
or
SELECT * FROM Customers
WHERE City NOT LIKE '[apl]%' and city like '_%';