Поиск…


Синтаксис

  • 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 '_%';


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow