Sql like как найти символ

LIKE SQL — это оператор, который используется для поиска строк, содержащих определённый шаблон символов. Подробнее о нём читайте в нашей статье.

  1. Синтаксис LIKE SQL
  2. Примеры использования LIKE SQL

Использовать оператор LIKE в SQL очень просто: достаточно прописать стандартную команду выбора SELECT * FROM и задать условие через WHERE, где и будет использован оператор LIKE.

Шаблон LIKE SQL:

    SELECT column1, column2, ...FROM table_nameWHERE columnN LIKE pattern;

Существует два подстановочных знака, которые используются в сочетании с оператором LIKE SQL:

  • % — знак процента представляет собой ноль, один или несколько символов;
  • _ — подчёркивание представляет собой один символ.

Примеры использования LIKE SQL

Рассмотрим SQL LIKE примеры. Представим, что вы хотите найти все имена, начинающиеся с буквы J. Для этого достаточно использовать следующий запрос:

    SELECT * FROM table_name WHERE name LIKE 'J%';

В данном случае символ % используется для указания любого количества символов после J. Таким образом, запрос найдёт все имена, которые начинаются с буквы J, независимо от того, какие символы следуют за ней.

Ещё один пример — поиск всех адресов электронной почты, содержащих слово gmail. Для этого можно использовать следующий запрос:

    SELECT * FROM table_name WHERE email LIKE '%gmail%';

Здесь символы % используются для указания, что слово gmail может быть в любом месте в адресе электронной почты.

Также можно использовать символ _ для указания одного символа. Например, запрос ниже найдет все имена, состоящие из шести символов. Эти имена должны начинаться с буквы J и заканчиваться буквой n:

    SELECT * FROM table_name WHERE name LIKE 'J____n';

Здесь каждый символ _ указывает на любой один символ.

Иногда символы % и _ сами могут быть частью искомой строки. В таких случаях их нужно экранировать. Например, запрос ниже найдет все имена, содержащие символ %:

    SELECT * FROM table_name WHERE name LIKE '%%%';

Это было короткое руководство по работе с SQL LIKE. Также вы можете почитать о других основных командах SQL.

В этом учебном пособии вы узнаете, как использовать в SQL Server условие LIKE (Transact-SQL) для выполнения сопоставления с шаблоном с синтаксисом и примерами.

Описание

Условие LIKE SQL Server (Transact-SQL) определяет, совпадает ли указанная символьная строка с заданным шаблоном в предложении WHERE в операторе SELECT, INSERT, UPDATE или DELETE. Это позволяет выполнять сопоставление образцов.

Синтаксис

Синтаксис условия LIKE в SQL Server (Transact-SQL):

expression LIKE pattern [ ESCAPE ‘escape_character’ ]

Параметры или аргументы

expression — символьное выражение, такое как столбец или поле.
pattern — символьное выражение, содержащее подстановочный символ. Подстановочные символы, которые вы можете выбрать:

символ пояснение
% Позволяет вам сопоставлять любую строку любой длины (включая нулевую длину)
_ Позволяет вам сопоставлять один символ
[ ] Позволяет вам сопоставлять любой символ в скобках [] (например, [abc] будет соответствовать символам a, b или c)
[^] Позволяет вам сопоставлять любой символ, не находящийся в скобках [^] (например, [^ abc] будет соответствовать любому символу, который не является символом a, b или c)

escape_character — необязательный. Это позволяет вам проверять для буквенных экземпляров символа подстановки, например % или _.

Пример использования подстановочного символа % (символ процента)

Первый пример SQL Server LIKE, который мы рассмотрим, включает использование шаблона %.

Давайте объясним, как шаблон % работает в SQL Server условии LIKE. Мы хотим найти всех employees (сотрудников), чье имя last_name начинается с ‘Б’.
Например:

SELECT *

  FROM employees

WHERE last_name LIKE ‘Б%’;

Этот пример условия SQL Server LIKE вернет всех employees у которых last_name будет начинаться на ‘Б’ такие как ‘Брошкин’, ‘Баранников’, ‘Богомолец’ и т.д.

Вы также можете использовать групповой символ % несколько раз в одной строке. Например:

SELECT *

  FROM employees

WHERE last_name LIKE ‘%o%’;

В этом примере SQL LIKE мы ищем всех employees (сотрудников), у которых last_name содержит букву ‘o’.

Пример использования подстановочного символа _ (символ подчеркивания)

Затем давайте объясним, как подстановочный символ _ (символ подчеркивания) работает в условии SQL Server LIKE. Помните, что _ ищет только один символ.
Например:

SELECT *

  FROM employees

WHERE last_name LIKE ‘Кр_т’;

Этот пример условия SQL LIKE возвращает всех employees (сотрудников), чье имя last_name равно 4 символам, причем первые два символа — «Кр», а последний символ — «т». Например, он может вернуть сотрудников, чье last_name является «Крот», «Крат», «Крут», «Крит» и т.д.

Вот еще один пример:

SELECT *

  FROM employees

WHERE employee_number LIKE ‘123_’;

Вам может понадобиться найти номер employee_number, но у вас есть только 3 из 4 цифр. В приведенном выше примере будет извлечено потенциально 10 записей (где отсутствующее значение могло бы равняться чему угодно от 0 до 9). Например, он может вернуть employees, чьи employee_number:

1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239

Пример использования подстановочного символа [] (квадратные скобки).

Далее, давайте объясним, как подстановочный символ [] (квадратные скобки) работает в условии SQL Server LIKE. Помните, что то, что содержится в квадратных скобках, это символы, которые вы пытаетесь сопоставить.
Например:

SELECT *

  FROM employees

WHERE first_name LIKE ‘К[ио]тов’;

Этот пример условия LIKE SQL Server возвращает всех employees, чье имя first_name равно 5 символам, причем первый символ — «К», а три последних символа — «тов», а второй символ — «и» или «о». Таким образом, в этом случае он будет соответствовать либо «Китов», либо «Котов».

Пример использования подстановочного символа [^] (квадратные скобки с символом ^).

Затем давайте объясним, как подстановочный символ [^] (квадратные скобки с подстановочным символом ^) работает в условии SQL Server LIKE. Помните, что то, что содержится в квадратных скобках, это символы, которые вы НЕ хотите сопоставлять.
Например:

SELECT *

  FROM employees

WHERE first_name LIKE ‘К[^ио]тов’;

Этот пример условия SQL Server LIKE возвращает всех сотрудников, чье имя first_name равно 5 символам, причем первый символ — «К», а три последних символа — «тов», а второй символ не является «и» или «о». Таким образом, в этом случае он будет соответствовать таким значениям, как «Катов», «Кутов», «Кетов» и т.д. Но это не будет соответствовать ни «Китов», ни «Котов».

Пример использования оператора NOT

Затем давайте посмотрим, как использовать SQL Server NOT Operator с помощью подстановочных символов.

Будем использовать % с оператором NOT. Вы также можете использовать условие SQL LIKE для поиска employees (сотрудников), имя которых не начинается с буквы «Б».
Например:

SELECT *

  FROM employees

WHERE last_name NOT LIKE ‘Б%’;

Поместив оператор NOT перед условием LIKE SQL Server, вы сможете получить всех employees, имя которых не начинается с «Б».

Пример использования символов Escape

Важно понимать, как сопоставить «Escape Characters» с pattern. Эти примеры относятся конкретно к экранирующим символам в SQL Server.

Предположим, вы хотели найти символ % или _ в условии SQL Server LIKE. Вы можете сделать это, используя символ Escape.

Обратите внимание, что вы можете определить escape-символ только как один символ (length = 1).
Например:

SELECT *

  FROM employees

WHERE secret_hint LIKE ‘123!%455’ ESCAPE ‘!’;

Этот пример условия SQL LIKE идентифицирует символ ! как escape-символ. Это предложение вернет всех employees, чей secret_hint составляет 123%455.

Вот еще один более сложный пример использования escape-символов в SQL Server условии LIKE.

SELECT *

  FROM employees

WHERE secret_hint LIKE ‘H%!%’ ESCAPE ‘!’;

Этот пример условия SQL LIKE возвращает всех employees, чей secret_hint начинается с ‘H’ и заканчивается на ‘%’. Например, он возвращает значение, например «Help%».

Вы также можете использовать escape-символ с символом _ в условии SQL Server LIKE.
Например:

SELECT *

  FROM employees

WHERE secret_hint LIKE ‘H%!_’ ESCAPE ‘!’;

Этот пример условия SQL LIKE возвращает всех employees, чей secret_hint начинается с ‘H’ и заканчивается на ‘_’. Например, он вернет значение, например «Help_».

Оператор LIKE применяется только к полям типа CHAR и VARCHAR, поскольку он используется для поиска подстрок. Другими словами, оператор LIKE осуществляет просмотр строки для выяснения: входит ли заданная подстрока в указанное поле. Для осуществления более качественного просмотра подстроки используются шаблоны. Шаблоны – это специальные символы, которые могут обозначать всё что угодно.

Шаблоны оператора LIKE для поиска

  • Существует три типа шаблонов, которые можно использовать с оператором LIKE:
  • Символ «нижнее подчёркивание» (_) заменяет один любой символ.
  • Символ «процент» (%) заменяет последовательность символов произвольной длины, в том числе и нулевой.
  • Квадратные скобки [ ], внутри них можно указать последовательность символов, чтобы выполнить поиск. Если мы укажем в квадратных скобках последовательность символов, например — ВИ, то поиск будет выполняться с учётом того, что информация будет начинаться с В или И.

Escape-символы (экранирование символов)

Чтобы найти в строке символ подчёркивания или процента, в предикате LIKE любой символ можно определить, как Escape-символ. Он используется в предикате непосредственно перед символом процента или подчёркивания, и означает что следующий за ним символ интерпретируется именно как обычный символ, а не как символ шаблона.

Практический пример с ESCAPE

Вывести из таблицы Users имена пользователей, чей прогресс составляет 44%.

SELECT name 
FROM Users 
WHERE name LIKE '44!% ' ESCAPE '!'

Практический пример с %

Вывести из таблицы Users имена пользователей, имена которых начинаются с буквы В.

SELECT name 
FROM Users 
WHERE name LIKE 'B%';

Практический пример с _

Вывести из таблицы Users имена пользователей, чьё имя составляет не более 7 символов и начинается на букву В.

SELECT name 
FROM Users 
WHERE name LIKE 'B______';

Практический пример с [ ]

Вывести из таблицы Users имена пользователей, которые начинаются на букву В и И.

SELECT name 
FROM Users 
WHERE name LIKE '[ВИ]%';

Можно использовать метасимвол ^, который означает противоположное действие. То есть сейчас мы ведем имена, которые не начинаются на буквы В и И.

SELECT name 
FROM Users 
WHERE name LIKE '[^ВИ]%';

Метки: LIKE, SQL.

Синтаксис

  • 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 Miseu0301rables"; Вам нужно будет сделать это для каждой графемы, а не для каждого персонажа. Вы не должны использовать вышеуказанный алгоритм, если имеете дело с азиатскими / восточно-азиатскими / южноазиатскими языками. Вернее, если вам нужен правильный код для начала, вы должны просто сделать это для каждого 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 '_%';

Оператор LIKE используется при условных запросах, когда мы хотим узнать соответствует ли строка определённому шаблону.

Например, у нас есть таблица Users, в которой есть поле email:

SELECT name, email FROM Users;

Допустим, мы хотим найти всех пользователей, чья почта лежит в домене второго уровня «hotmail». Т.е. нужно отобрать только те записи, что
отвечают условию:

  • после символа «@» следует «hotmail»
  • после «hotmail» следует символ «.» и далее любая последовательность символов

Для таких нетривиальных поисков по строковым полям и нужен оператор LIKE.

Синтаксис

... WHERE поле_таблицы [NOT] LIKE шаблон_строки

Шаблон может включать следующие специальные символы:

Так наш запрос на поиск пользователей в домене «hotmail» может выглядеть следующим образом:

SELECT name, email FROM Users
WHERE email LIKE '%@hotmail.%'

Примеры

  • ... WHERE поле_таблицы LIKE 'text%'
    

    Сопоставляется любым строкам, начинающимся на «text»

  • ... WHERE поле_таблицы LIKE '%text'
    

    Сопоставляется любым строкам, заканчивающимся на «text»

  • ... WHERE поле_таблицы LIKE '_ext'
    

    Сопоставляется строкам, имеющим длину 4 символа, при этом 3 последних обязательно должны быть «ext». Например, слова «text» и «next»

  • ... WHERE поле_таблицы LIKE 'begin%end'
    

    Сопоставляется строкам, начинающихся на «begin» и заканчивающихся на «end»

В MySQL по умолчанию шаблоны не чувствительны к регистру

ESCAPE-символ

ESCAPE-символ используется для экранирования специальных символов (% и ).
В случае если вам нужно найти строки, вы можете использовать ESCAPE-символ.

Например, вы хотите получить идентификаторы задач, прогресс которых равен 3%:

SELECT job_id FROM Jobs
WHERE progress LIKE '3!%' ESCAPE '!';

Если бы мы не экранировали трафаретный символ, то в выборку попало бы всё, что начинается на 3.

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Ошибка вложение не найдено на устройстве как исправить на андроид
  • Как найти массу куба для 5 класса
  • Как найти утечку фреона своими руками
  • Как правильно составить договор купли продажи гаража с земельным участком
  • Как составить резюме если нет опыта работы в данной сфере

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии