Руководство по SQL. Предикат LIKE. – PROSELYTE
Для сравнения символьных строк на схожесть с определённым шаблоном в языке структурированных запросов SQL используется предикат LIKE. Существует два вида шаблонов, которые используются вместе с LIKE:
- Символ процента – ‘%’
- Символ подчеркивания – ‘_’
Символ процента обозначает один или несколько символов, а знак подчёркивания – одно число, или символ. Мы можем использовать символы в различных комбинациях.
Общий вид запроса с использованием предиката LIKE имеет следующий вид:
SELECT FROM имя талицы
WHERE имя_колонки LIKE '%XXXX'
или
SELECT FROM имя талицы
WHERE имя_колонки LIKE '%XXXX%'
или
SELECT FROM имя талицы
WHERE имя_колонки LIKE'_XXXX'
В данном примере ХХХХ представлены символьными строками.
Мы также можем использовать операторы AND/OR для комбинирования нескольких условий.
Пример:
Предположим, что у нас есть таблица
+----+-------------------+------------+------------+--------+
| ID | NAME | SPECIALTY | EXPERIENCE | SALARY |
+----+-------------------+------------+------------+--------+
| 1 | Eugene Suleimanov | Java | 2 | 2500 |
| 2 | Peter Romanenko | Java | 3 | 3500 |
| 3 | Andrei Komarov | JavaScript | 3 | 2500 |
| 4 | Konstantin Geiko | C# | 2 | 2000 |
| 5 | Asya Suleimanova | UI/UX | 2 | 1800 |
+----+-------------------+------------+------------+--------+
Допустим, что нам необходимо получить всех разработчиков, которые содержат в специальности последовательность символов ‘java’.
Для этого нам необходимо использовать следующую команду:
mysql> SELECT * FROM developers WHERE SPECIALTY LIKE '%java%';
В результате выполнения данного запроса мы получим следующий результат:
+----+-------------------+------------+------------+--------+
| ID | NAME | SPECIALTY | EXPERIENCE | SALARY |
+----+-------------------+------------+------------+--------+
| 1 | Eugene Suleimanov | Java | 2 | 2500 |
| 2 | Peter Romanenko | Java | 3 | 3500 |
| 3 | Andrei Komarov | JavaScript | 3 | 2500 |
+----+-------------------+------------+------------+--------+
Мы можем создавать любые шаблоны подстановки в зависимости от наших задач.
На этом мы заканчиваем изучение предиката LIKE.
В следующей статье мы рассмотрим, как получить определённое число первых записей из таблицы.
SQL LIKE — строка с заданными символами и её поиск
Часто с помощью предиката SQL LIKE найти нужную строку в текстовых значениях таблицы проще, чем с помощью оператора равенства (=). Предикат LIKE используется в секции WHERE. После предиката прописывается выражение, содержащее символы алфавита, а также специальные символы — знак процента (%) и подчёркивание (_).
- Символ % соответствует любому количеству любых символов, а также их отсутствую.
- Символ _ соответствует ровно одному любому символу.
Приведём виды наиболее распространённых выражений, которые используются с предикатом LIKE для поиска подстроки.
- ‘xyz%’ — любые строки, которые начинаются с букв xyz;
- ‘xyz_’ — строка длиной в определённое количество символов, которая обязательно начинается с указанных букв;
- ‘%z’ — любая последовательность символов, которая заканчивается символом z;
- ‘%Word%’ — любая последовательность символов, содержащая слово ‘Word’ в любой позиции строки;
- ‘% % %’ — строка, содержащая не менее двух пробелов.
Следует обратить внимание, что в этих выражениях Word — не то же самое, что word, так как регистр символов имеет значение. В целом же синтаксис запросов с предикатом LIKE следующий:
SELECT СТОЛБЦЫ FROM ИМЯ_ТАБЛИЦЫ WHERE ИМЯ_СТОЛБЦА LIKE ВЫРАЖЕНИЕ
В примерах будем работать с базой данных «Театр». Таблица Play содержит данные о постановках. Таблица Team — о ролях актёров. Таблица Actor — об актёрах. Таблица Director — о режиссёрах. Поля таблиц, первичные и внешние ключи можно увидеть на рисунке ниже (для увеличения нажать левой кнопкой мыши). Данные будем извлекать из одной таблицы — Play.
Пример 1. Вывести спектакли, названия которых начинаются со слова ‘King’.
Пишем запрос в котором с предикатом LIKE используем выражение ‘King%’:
SELECT Name FROM Play WHERE Name LIKE ‘King%’
В результате выполнения запроса будет выведена таблица с одной строкой:
Пример 2. Вывести спектакли, названия которых начинаются с буквы ‘O’ и содержат 7 символов.
Пишем запрос в котором с предикатом LIKE используем выражение ‘O______’ (подчёркивание проставлено 6 раз):
SELECT Name FROM Play WHERE Name LIKE ‘O______’
В результате выполнения запроса будет выведена таблица с одной строкой:
Поделиться с друзьями
Команда LIKE — поиск по базе данных
Команда LIKE задает поиск по определенному шаблону.
См. также команду NOT, которая делает отрицание (к примеру, так: NOT LIKE).
Синтаксис
SELECT * FROM имя_таблицы WHERE поле LIKE шаблон_поиска
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
5 | Иван | 27 | 500 |
6 | Кирилл | 28 | 1000 |
Пример
В данном примере команда LIKE найдет все записи, у которых имя заканчивается на ‘я’:
SELECT * FROM workers WHERE name LIKE '%я'
SQL запрос выберет следующие строки:
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 |
Пример
Давайте выберем те записи, у которых возраст начинается с цифры 2, а затем идет еще один символ:
SELECT * FROM workers WHERE age LIKE '2_'
SQL запрос выберет следующие строки:
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
5 | Иван | 27 | 500 |
6 | Кирилл | 28 | 1000 |
LIKE SQL Server — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
В этом учебном пособии вы узнаете, как использовать в 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 ‘Б%’;
SELECT * FROM employees WHERE last_name LIKE ‘Б%’; |
Этот пример условия SQL Server LIKE вернет всех employees у которых last_name будет начинаться на ‘Б’ такие как ‘Брошкин’, ‘Баранников’, ‘Богомолец’ и т.д.
Вы также можете использовать групповой символ % несколько раз в одной строке. Например:
SELECT * FROM employees WHERE last_name LIKE ‘%o%’;
SELECT * FROM employees WHERE last_name LIKE ‘%o%’; |
В этом примере SQL LIKE мы ищем всех employees (сотрудников), у которых last_name содержит букву ‘o’.
Пример использования подстановочного символа _ (символ подчеркивания)
Затем давайте объясним, как подстановочный символ _ (символ подчеркивания) работает в условии SQL Server LIKE. Помните, что _ ищет только один символ.
Например:
SELECT * FROM employees WHERE last_name LIKE ‘Кр_т’;
SELECT * FROM employees WHERE last_name LIKE ‘Кр_т’; |
Этот пример условия SQL LIKE возвращает всех employees (сотрудников), чье имя last_name равно 4 символам, причем первые два символа — «Кр», а последний символ — «т». Например, он может вернуть сотрудников, чье last_name является «Крот», «Крат», «Крут», «Крит» и т.д.
Вот еще один пример:
SELECT * FROM employees WHERE employee_number LIKE ‘123_’;
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 ‘К[ио]тов’;
SELECT * FROM employees WHERE first_name LIKE ‘К[ио]тов’; |
Этот пример условия LIKE SQL Server возвращает всех employees, чье имя first_name равно 5 символам, причем первый символ — «К», а три последних символа — «тов», а второй символ — «и» или «о».ио]тов’;
Этот пример условия SQL Server LIKE возвращает всех сотрудников, чье имя first_name равно 5 символам, причем первый символ — «К», а три последних символа — «тов», а второй символ не является «и» или «о». Таким образом, в этом случае он будет соответствовать таким значениям, как «Катов», «Кутов», «Кетов» и т.д. Но это не будет соответствовать ни «Китов», ни «Котов».
Пример использования оператора NOT
Затем давайте посмотрим, как использовать SQL Server NOT Operator с помощью подстановочных символов.
Будем использовать % с оператором NOT. Вы также можете использовать условие SQL LIKE для поиска employees (сотрудников), имя которых не начинается с буквы «Б».
Например:
SELECT * FROM employees WHERE last_name NOT LIKE ‘Б%’;
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 ‘!’;
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 ‘!’;
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 ‘!’;
SELECT * FROM employees WHERE secret_hint LIKE ‘H%!_’ ESCAPE ‘!’; |
Этот пример условия SQL LIKE возвращает всех employees, чей secret_hint начинается с ‘H’ и заканчивается на ‘_’. Например, он вернет значение, например «Help_».
LIKE условие MySQL — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
В этом учебном пособии вы узнаете, как использовать MySQL условие LIKE для выполнения сопоставления шаблонов с синтаксисом и примерами.
Описание
MySQL условие LIKE позволяет использовать шаблоны в операторе WHERE для оператора SELECT, INSERT, UPDATE или DELETE. Это позволяет выполнять сопоставление шаблонов.
Синтаксис
Синтаксис условия LIKE в MySQL:
expression LIKE pattern [ ESCAPE ‘escape_character’ ]
Параметры или аргументы
expression — символьное выражение, такое как столбец или поле.
pattern — символьное выражение, содержащее сопоставление шаблонов. Шаблоны, которые вы можете выбрать:
% — позволяет вам сопоставлять любую строку любой длины (включая нулевую длину)
_ — позволяет вам сопоставлять один символ
escape_character — необязательный. Это позволяет вам проверять для буквенных экземпляров символы подстановки, такие как % или _. Если вы не укажите escape_character, MySQL предположит, что \ является escape_character.
Пример использования символа % (подстановочный символ процента)
Первый MySQL пример LIKE, который мы рассмотрим, включает использование % (подстановочный символ процента).
Рассмотрим как % работает в MySQL условии LIKE. Мы хотим найти всех customers, last_name которых начинается с «Ber».
SELECT customer_name FROM customers WHERE last_name LIKE ‘Ber%’;
SELECT customer_name FROM customers WHERE last_name LIKE ‘Ber%’; |
Вы также можете использовать % несколько раз в одной строке.
Например:
SELECT customer_name FROM customers WHERE last_name LIKE ‘%ns%’;
SELECT customer_name FROM customers WHERE last_name LIKE ‘%ns%’; |
В этом примере MySQL условия LIKE мы ищем всех customers, у которых last_name содержит символы ‘ns’.
Пример использования подстановочного символа _ (подстановочный символ подчеркивания)
Рассмотрим, как знак _ (подстановочный символ подчеркивания) работает в MySQL условии LIKE. Помните, что подстановочный символ _ означает только один символ.
SELECT supplier_name FROM suppliers WHERE supplier_name LIKE ‘Ber_ard’;
SELECT supplier_name FROM suppliers WHERE supplier_name LIKE ‘Ber_ard’; |
Этот пример MySQL условия LIKE возвращает всех suppliers, supplier_name которых составляет 7 символов, причем первые три символа — «Ber», а последние три символа — «ard». Например, он может вернуть всех, supplier_name которых — ‘Bernard’, ‘Berzard’, ‘Bermard’, ‘Bersard’ и т.д.
И еще один пример:
SELECT * FROM suppliers WHERE account_number LIKE ‘12345_’;
SELECT * FROM suppliers WHERE account_number LIKE ‘12345_’; |
Вам может понадобиться найти номер учетной записи, но у вас есть только 5 из 6 цифр. В приведенном выше примере будет извлечено потенциально 10 записей (где отсутствующее значение могло бы равняться чему угодно от 0 до 9). Например, запрос может вернуть suppliers, чьи номера учетной записи: 123450, 123451, 123452, 123453, 123454, 123455, 123456, 123457, 123458, 123459
Пример использования оператора NOT
Рассмотрим, как вы будете использовать оператор NOT с подстановочными символами.
Давайте использовать подстановочный символ % с оператором NOT. Вы также можете использовать MySQL условие LIKE для поиска suppliers, supplier_name которых не начинается с «B».
Например:
SELECT supplier_name FROM suppliers WHERE supplier_name NOT LIKE ‘B%’;
SELECT supplier_name FROM suppliers WHERE supplier_name NOT LIKE ‘B%’; |
Помещая оператора NOT перед MySQL условием LIKE, вы получите всех suppliers, supplier_name которых не начинается с «B».
Пример использования символов Escape
Важно понять, каким образом «Escape Characters» сравнивается с шаблоном. Эти примеры относятся конкретно к экранирующим символам в MySQL.
Предположим, вы хотели найти символы % или _ в MySQL условии LIKE. Вы можете сделать это, используя символ Escape.
Обратите внимание, что вы можете определить только escape-символ как один символ (длина 1).
Например:
SELECT * FROM suppliers WHERE supplier_name LIKE ‘B\%’;
SELECT * FROM suppliers WHERE supplier_name LIKE ‘B\%’; |
Поскольку мы не указали каким будет escape-символ, то MySQL предполагает, что «\» и является escape-символом. Т.к. MySQL предположил, что «\» это и есть escape-символ, что приведет к тому, что MySQL обработает символ % как литерал, вместо подстановочного символа. Затем этот запрос будет возвращать всех suppliers, у которых supplier_name = ‘B\%’.
Мы можем переопределить escape-символ по умолчанию в MySQL, предоставив модификатор ESCAPE следующим образом:
SELECT * FROM suppliers WHERE supplier_name LIKE ‘Br!%’ ESCAPE ‘!’;
SELECT * FROM suppliers WHERE supplier_name LIKE ‘Br!%’ ESCAPE ‘!’; |
Этот пример MySQL условия LIKE идентифицирует символ ! как escape-символ. Escape-символ ! приведет к тому, что MySQL обрабатывает символ % как литерал. В результате в этом запросе также будут выбраны все suppliers, supplier_name которых Br%.
Вот еще один более сложный пример использования escape-символов в MySQL условии LIKE.
SELECT * FROM suppliers WHERE supplier_name LIKE ‘H%\%’;
SELECT * FROM suppliers WHERE supplier_name LIKE ‘H%\%’; |
Этот пример условия LIKE MySQL возвращает всех suppliers, чье имя начинается с H и заканчивается на %. Например, он вернет значение, например «Hello%». Поскольку мы не указывали escape-символ в условии LIKE, MySQL предполагает, что escape-символ «\», что приводит к тому, что MySQL обрабатывает второй символ % как литерал вместо подстановочного символа.
Мы могли бы изменить это условие LIKE, указав escape-символ следующим образом:
SELECT * FROM suppliers WHERE supplier_name LIKE ‘H%!%’ ESCAPE ‘!’;
SELECT * FROM suppliers WHERE supplier_name LIKE ‘H%!%’ ESCAPE ‘!’; |
Этот пример MySQL условия LIKE возвращает всех suppliers, имя которых начинается с H и заканчивается символом %. Например, он вернет значение, например «Hello%».
Вы также можете использовать escape character с символом _ в MySQL условии LIKE.
Например:
SELECT * FROM suppliers WHERE supplier_name LIKE ‘H%\_’;
SELECT * FROM suppliers WHERE supplier_name LIKE ‘H%\_’; |
Опять же, поскольку не предусмотрен модификатор ESCAPE, MySQL использует «\» в качестве символа escape, в результате чего символ _ обрабатывается как литерал вместо подстановочного символа. В этом примере будут возвращены все suppliers, supplier_name которых начинается с H и заканчивается на _. Например, запрос вернет значение, такое как «Hello_».
MS SQL Server и T-SQL
Операторы фильтрации
Последнее обновление: 13.07.2017
Оператор IN
Оператор IN позволяет определить набор значений, которые должны иметь столбцы:
WHERE выражение [NOT] IN (выражение)
Выражение в скобках после IN определяет набор значений. Этот набор может вычисляться динамически на основании, например, еще одного запроса, либо это могут быть константные значения.
Например, выберем товары, у которых производитель либо Samsung, либо Xiaomi, либо Huawei:
SELECT * FROM Products WHERE Manufacturer IN ('Samsung', 'Xiaomi', 'Huawei')
Мы могли бы все эти значения проверить и через оператор OR:
SELECT * FROM Products WHERE Manufacturer = 'Samsung' OR Manufacturer = 'Xiaomi' OR Manufacturer = 'Huawei'
Но использование оператора IN гораздо удобнее, особенно если подобных значений очень много.
С помощью оператора NOT можно найти все строки, которые, наоборот, не соответствуют набору значений:
SELECT * FROM Products WHERE Manufacturer NOT IN ('Samsung', 'Xiaomi', 'Huawei')
Оператор BETWEEN
Оператор BETWEEN определяет диапазон значений с помощью начального и конечного значения, которому должно соответствовать выражение:
WHERE выражение [NOT] BETWEEN начальное_значение AND конечное_значение
Например, получим все товары, у которых цена от 20 000 до 40 000 (начальное и конечное значения также включаются в диапазон):
SELECT * FROM Products WHERE Price BETWEEN 20000 AND 40000
Если надо, наоборот, выбрать те строки, которые не попадают в данный диапазон, то применяется оператор NOT:
SELECT * FROM Products WHERE Price NOT BETWEEN 20000 AND 40000
Также можно использовать более сложные выражения. Например, получим товары, запасы которых на определенную сумму (цена * количество):
SELECT * FROM Products WHERE Price * ProductCount BETWEEN 100000 AND 200000
Оператор LIKE
Оператор LIKE принимает шаблон строки, которому должно соответствовать выражение.1-6]%’
Соответствует таким значениям как «iPhone 7», «iPhone 7S» и «iPhone 8». Но не соответствует значениям «iPhone 5», «iPhone 6» и «iPhone 6S»
Применим оператор LIKE:
SELECT * FROM Products WHERE ProductName LIKE 'iPhone [6-8]%'
Использование условия SQL like для сравнения значений: синтаксис и примеры
От автора: условие SQL LIKE используется для сравнения значения с аналогичными значениями с использованием подстановочных операторов. В сочетании с оператором LIKE используются два подстановочных знака. Знак процента (%). Подчеркивание (_).
Знак процента представляет ноль, один или несколько символов. Символ подчеркивания представляет одно число или символ. Эти символы могут использоваться в различных комбинациях.
Синтаксис
SELECT FROM table_name WHERE column LIKE ‘XXXX%’ или SELECT FROM table_name WHERE column LIKE ‘%XXXX%’ или SELECT FROM table_name WHERE column LIKE ‘XXXX_’ или SELECT FROM table_name WHERE column LIKE ‘_XXXX’ или SELECT FROM table_name WHERE column LIKE ‘_XXXX_’
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | SELECT FROM table_name WHERE column LIKE ‘XXXX%’
или
SELECT FROM table_name WHERE column LIKE ‘%XXXX%’
или
SELECT FROM table_name WHERE column LIKE ‘XXXX_’
или
SELECT FROM table_name WHERE column LIKE ‘_XXXX’
или
SELECT FROM table_name WHERE column LIKE ‘_XXXX_’ |
С помощью операторов AND или OR вы можете комбинировать N-ное количество условий. Здесь XXXX может быть любым числовым или строковым значением.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Получить курс сейчас!Пример
В следующей таблице приведено несколько примеров, в которых часть WHERE содержит разные условия LIKE с операторами «%» и «_»:
Давайте рассмотрим реальный пример. Возьмем таблицу CUSTOMERS, которая содержит следующие записи.
Ниже приведен код, который отображает все записи из таблицы CUSTOMERS, для которых значение в поле SALARY начинается с 200.
SELECT * FROM CUSTOMERS WHERE SALARY LIKE ‘200%’;
SELECT * FROM CUSTOMERS WHERE SALARY LIKE ‘200%’; |
Этот код дает следующий результат:
Источник: //www.tutorialspoint.com/
Редакция: Команда webformyself.
Бесплатный курс по PHP программированию
Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC
В курсе 39 уроков | 15 часов видео | исходники для каждого урока
Получить курс сейчас!Хотите изучить MySQL?
Посмотрите курс по базе данных MySQL!
СмотретьSQL WHERE LIKE, SELECT WHERE LIKE Wildcard — с примерами
Когда использовать WHERE LIKE в SQL?
Используйте WHERE LIKE, если известен только фрагмент текстового значения.
Предложение WHERE LIKE определяет, соответствует ли строка символов шаблону.
WHERE LIKE поддерживает два варианта сопоставления с подстановочными знаками:% и _.
Синтаксис SQL WHERE LIKE
Общий синтаксис
ВЫБЕРИТЕ имена столбцов ОТ имя-таблицы ГДЕ имя-столбца LIKE value
В «значении» разрешены подстановочные знаки% (процент) и _ (подчеркивание).
- % (процент) соответствует любой строке, содержащей ноль или более символов.
- _ (подчеркивание) соответствует любому одиночному символу.
ПРОДУКТ |
---|
Идентификатор |
Название продукта |
Идентификатор поставщика |
Цена единицы |
Упаковка |
Снято с производства |
SQL WHERE LIKE Примеры
Задача : перечислить все продукты с названиями, начинающимися с ‘Ca’
ВЫБЕРИТЕ Id, ProductName, UnitPrice, Package ОТ ПРОДУКТА ГДЕ ProductName КАК "Ca%"
Результат: 2 записи.
Id | Название продукта | Цена за единицу | Пакет |
---|---|---|---|
18 | Карнарвон Тайгерс | 62,50 | 16 кг уп. |
60 | Камамбер Пьеро | 34,00 | патронов 15-300 г |
ПРОДУКТ |
---|
Идентификатор |
Название продукта |
Идентификатор поставщика |
Цена единицы |
Упаковка |
Снято с производства |
Проблема : перечислить все продукты, которые начинаются с
«Ча» или «Чан» и иметь еще один символ.
ВЫБЕРИТЕ Id, ProductName, UnitPrice, Package ОТ ПРОДУКТА ГДЕ ProductName КАК 'Cha_' ИЛИ ProductName КАК 'Chan_'
Результат: 2 записи.
Id | Название продукта | Цена за единицу | Пакет |
---|---|---|---|
1 | Чай | 18.00 | 10 коробок по 20 пакетов |
2 | Чанг | 19,00 | Бутылки 24-12 унций |
sql — есть ли в SQL комбинация «LIKE» и «IN»?
Я знаю, что это очень поздно, но у меня была похожая ситуация. Мне нужен был оператор «Like In» для набора хранимых процедур, который у меня есть, который принимает множество параметров, а затем использует эти параметры для агрегирования данных из нескольких систем РСУБД, поэтому никакие специфические трюки РСУБД не будут работать, однако хранимая процедура и любые функции будет работать на MS SQL Server, поэтому мы можем использовать T-SQL для функциональности генерации полных операторов SQL для каждой СУБД, но выходные данные должны быть в значительной степени независимыми от СУБД.
Это то, что я придумал на данный момент, чтобы превратить строку с разделителями (например, параметр, входящий в хранимую процедуру) в блок SQL. Я называю это «Лишайник» от «НРАВИТСЯ». Возьми?
Lichen.sql
УСТАНОВИТЬ ANSI_NULLS ВКЛ.
ИДТИ
ВКЛЮЧИТЬ QUOTED_IDENTIFIER
ИДТИ
- ================================================ =======================
- Лишайник - функция со скалярным значением
- Возвращает nvarchar (512) из результатов типа "LIKE IN". См. Дополнительную документацию.- СОЗДАТЕЛЬ: Норман Дэвид Кук
- СОЗДАНО: 2020-02-05
- ОБНОВЛЕНО:
- ================================================ =======================
СОЗДАТЬ ИЛИ ИЗМЕНИТЬ ФУНКЦИЮ Lichen
(
- Добавьте сюда параметры функции
@leadingAnd bit = 1,
@delimiter nchar (1) = ';',
@colIdentifier nvarchar (64),
@argString nvarchar (256)
)
ВОЗВРАТ nvarchar (512)
В ВИДЕ
НАЧИНАТЬ
- Объявите здесь возвращаемую переменную
ОБЪЯВИТЬ @result nvarchar (512)
- установить разделитель для обнаружения (добавьте сюда больше, чтобы обнаружить разделитель, если он не указан)
ОБЪЯВЛЕНИЕ @delimit nchar (1) = ';'
ЕСЛИ НЕ @delimiter = @delimit
УСТАНОВИТЬ @delimit = @delimiter
- проверьте, есть ли у нас какие-либо разделители во входном шаблоне
IF CHARINDEX (@delimit, @argString)> 1 - проверить наличие подобного в разделителе
BEGIN - начать ветку как в, найдя разделитель
- установить табличную переменную и разделить на нее предоставленный шаблон string_split.DECLARE @lichenTable TABLE ([id] [int] IDENTITY (1,1) NOT NULL, строка NVARCHAR (32))
ВСТАВИТЬ В @lichenTable SELECT * FROM STRING_SPLIT (@argString, ';')
- настроить итераторы цикла и определить, сколько строк было вставлено в таблицу лишайников
ОБЪЯВИТЬ @loopCount int = 1
ОБЪЯВИТЬ @lineCount int
ВЫБЕРИТЕ @lineCount = COUNT (*) из @lichenTable
- выберите временную таблицу (чтобы увидеть, что внутри для отладки)
--select * из @lichenTable
- BEGIN AND блок-оболочка для LIKE IN, если бит установлен
ЕСЛИ @leadingAnd = 1
НАБОР @result = 'И ('
ЕЩЕ
НАБОР @result = '('
- пройти через временную таблицу для создания нескольких блоков «LIKE 'x' OR» внутри внешнего блока-оболочки AND
ПОКА ((@loopCount НЕ НУЛЕВО) И (@loopCount <= @lineCount))
НАЧАТЬ - начать цикл через @lichenTable
IF (@loopcount = 1) - первый цикл не получает OR впереди
ВЫБЕРИТЕ @result = CONCAT (@result, '', @colIdentifier, 'LIKE' '', line, '' '') ОТ @lichenTable WHERE id = @loopCount
ИНАЧЕ - но все последующие петли делают
ВЫБЕРИТЕ @result = CONCAT (@result, 'OR', @colIdentifier, 'LIKE' '', line, '' '') FROM @lichenTable WHERE id = @loopCount
SET @loopcount = @loopCount + 1 - увеличить цикл
END - завершить цикл через @lichenTable
- установить финальные скобки после цикла lichenTable
НАБОР @result = СЦЕПИТЬ (@result, ')')
END - завершить ветку как в, найдя разделитель
ИНАЧЕ - разделитель не указан
BEGIN - начало ветки "разделитель не найден"
ЕСЛИ @leadingAnd = 1
SET @result = CONCAT ('И', @colIdentifier, 'LIKE' '' + @argString + '' '')
ЕЩЕ
НАБОР @result = CONCAT ('', @colIdentifier, 'LIKE' '' + @argString + '' '')
END - конец ветки "разделитель не найден"
- Вернуть результат функции
ВОЗВРАТ @result
КОНЕЦ - завершение функции лишайника
ИДТИ
Обнаружение разделителя, возможно, запланировано, но на данный момент по умолчанию используется точка с запятой, поэтому вы можете просто поместить туда по умолчанию
.Вероятно, в этом есть ошибки. Параметр @leadingAnd
- это всего лишь битовое значение, определяющее, хотите ли вы, чтобы перед блоком было помещено ведущее «И», чтобы оно хорошо вписывалось в другие дополнения предложения WHERE.
Пример использования (с разделителем в argString)
SELECT [dbo]. [Lichen] (
по умолчанию - @leadingAND, бит, по умолчанию: 1
, по умолчанию - @delimiter, nchar (1), по умолчанию: ';'
, 'foo.bar' - @colIdentifier, nvarchar (64), это идентификатор столбца
, '01%; 02%;% 03% '- @argString, nvarchar (256), это входная строка для синтаксического анализа "LIKE IN" из
)
ИДТИ
вернет nvarchar (512), содержащий:
И (foo.bar КАК '01% 'ИЛИ foo.bar КАК '02%' ИЛИ foo.bar КАК '% 03%')
Он также пропустит блок, если ввод не содержит разделителя:
Пример использования (без разделителя в argString)
SELECT [dbo]. [Lichen] (
по умолчанию - @leadingAND, бит, по умолчанию: 1
, по умолчанию - @delimiter, nchar (1), по умолчанию: ';'
, 'foo.bar' - @colIdentifier, nvarchar (64), это идентификатор столбца
, '01% '- @argString, nvarchar (256), это входная строка для синтаксического анализа "LIKE IN" из
)
ИДТИ
вернет nvarchar (512), содержащий:
И foo.bar LIKE '01% '
Я собираюсь продолжить работу над этим, поэтому, если я что-то упустил (явно очевидное или иное), пожалуйста, не стесняйтесь комментировать или обращаться.
Как использовать LIKE в SQL
База данных:
Операторы:
LIKE, WHEREЗадача:
Вы хотите найти в строке подстроку, соответствующую шаблону.
Пример:
В нашей базе данных есть таблица с именем customer с данными в следующих столбцах: id
, first_name
, last_name
и city
.
id | first_name | last_name | city |
---|---|---|---|
1 | Алан | Уотсон | Мадрид |
2 | Лиза | Черный | Сингапур |
3 | Лаура | Уильямс | Сиэтл |
4 | Милан | Кирпич | Сеул |
Давайте посмотрим на несколько примеров сопоставления с образцом в SQL.
Пример 1:
Давайте отобразим имя, фамилию и город каждого клиента, название города которого начинается с буквы «S».
Решение:
ВЫБЕРИТЕ last_name, first_name, city ОТ заказчика ГДЕ город НРАВИТСЯ "S%";
фамилия | имя | город |
---|---|---|
Lisa | Черный | S ingapore |
Милан | Кирпич | S eoul |
Лаура | Уильямс | S Елень |
Мы использовали подстановочный знак%, который представляет ноль или более неизвестных символов.Этот подстановочный знак можно использовать в любом месте строки.
Пример 2:
Давайте покажем имя, фамилию и город каждого покупателя, название города которого состоит ровно из пяти символов.
Решение:
ВЫБЕРИТЕ last_name, first_name, city ОТ заказчика ГДЕ город КАК '_____';
Вот результат:
фамилия | имя | город |
---|---|---|
Милан | Кирпич | Сеул |
Подстановочный знак подчеркивания может использоваться для представления одного неизвестного символа.Таким образом, используя пять из них подряд, мы можем представить все строки длиной пять символов. В нашем примере единственный город, соответствующий этому описанию, - это Сеул.
Пример 3:
Давайте покажем имя, фамилию и город каждого клиента, чей город начинается с буквы «S» и имеет букву «o» в качестве предпоследнего символа.
Решение:
ВЫБЕРИТЕ last_name, first_name, city ОТ заказчика ГДЕ город КАК 'S% o__';
Вот результат:
фамилия | имя | город |
---|---|---|
Lisa | Черный | S ingap o re |
Милан | Кирпич | S e o ul |
Запрос вернул только две записи: Лиза Блэк из S ingap o re и Milan Brick из S e o ul.Эти города соответствуют заданному шаблону. Здесь мы объединили оба символа подстановки, чтобы создать более конкретный шаблон: все строки, начинающиеся с заглавной буквы «S» и содержащие любое количество других символов после этого, при условии, что предпоследний символ является строчной буквой «o». '
Обсуждение:
Если вы хотите выбрать записи, в которых строка соответствует определенному шаблону, вы можете использовать предложение LIKE
в качестве условия в предложении WHERE
. После ГДЕ
укажите имя столбца (например,g., city
), за которым следует предложение LIKE
, определяющее шаблон строки (например, 'S% o__'
) для поиска.
Как мы видели в примерах, вы можете использовать два специальных символа, известных как подстановочные знаки , для представления неизвестных символов:
- Подстановочный знак «%» обозначает ноль или более символов.
- Подстановочный знак '_' обозначает любой отдельный символ.
Вы можете комбинировать эти подстановочные знаки для достижения действительно впечатляющих результатов.Вы также можете связать более одного условия LIKE
. Наконец, вы можете использовать оператор NOT
, чтобы найти строки, которые не соответствуют заданному шаблону.
Обзор оператора SQL LIKE
В этой статье мы узнаем, как использовать оператор SQL LIKE в SQL Server, используя регулярные выражения для поиска и / или управления текстом. Мы начнем с изучения символов и базового синтаксиса использования регулярных выражений с подстановочными знаками.Мы будем использовать наборы символов и выражения повторения для создания гибких шаблонов сопоставления, и попутно изучим различные способы использования оператора LIKE. И, наконец, в последней части раздела мы рассмотрим некоторые из наиболее распространенных и наиболее полезных примеров регулярных выражений.
SQL - наиболее часто используемый язык для работы с базами данных. Когда вы разрабатываете отчет, используете бизнес-аналитику или любой другой инструмент отчетности, программное обеспечение почти наверняка незаметно создает SQL-запрос, который выполняется в базе данных и возвращает выбранные вами данные.Когда мы ищем конкретные данные или данные, соответствующие определенным критериям, предложение where предоставляет необходимый набор инструментов. Это дает возможность запрашивать определенные строки, которые мы ищем, а не всю таблицу.
Предварительные требования
Загрузите базу данных AdventureWorks2014 здесь, чтобы протестировать следующие образцы T-SQL.
Начало работы
Давайте пройдемся по операторам SQL, используя ключевое слово LIKE и подстановочные знаки.Итак, приступим к изучению оператора SQL LIKE.
Примеры использования подстановочных знаков SQL LIKE
Регулярные выражения - это шаблоны для описания сопоставления строк в предложении WHERE. Многие языки программирования поддерживают регулярные выражения, синтаксис которых немного отличается от синтаксиса оператора LIKE. В этой статье, когда мы говорим о регулярных выражениях, мы имеем в виду шаблоны, используемые с оператором SQL LIKE.
В следующей таблице представлены четыре разных символа подстановки.Вы также можете обратиться к статье Строковые функции SQL для Data Munging (Wrangling) за дополнительными примерами.
Подстановочные знаки | Описание | |
% | Любая строка, содержащая ноль или более символов в шаблоне поиска.] | Поиск по одному символу за пределами указанного диапазона |
Использование SQL LIKE с подстановочным знаком «%»
Следующий оператор SQL возвращает все строки таблицы person, где их фамилии начинаются с буквы A.Давайте укажем букву «A», первый символ, который должен быть в строке, а затем используем подстановочный знак «%», процент.
ВЫБРАТЬ ТОП 10 * ОТ Person.Person WHERE firstname LIKE 'A%'; |
Вы увидите вывод, в котором перечислены 10 верхних строк таблицы person, где имя начинается с A, а остальная часть символа неизвестна.
Использование SQL LIKE с подстановочным знаком «_»
Подстановочный знак, подчеркивание, соответствует любому одиночному символу. Следующая инструкция SQL находит все телефонные номера, код зоны которых начинается с 7 и заканчивается на 8 в столбце номер телефона . Мы также добавили подстановочный знак% в конце шаблона поиска, поскольку нас не интересуют остальные строковые значения.
ВЫБРАТЬ стр.FirstName, p.LastName, PhoneNumber FROM Person.PersonPhone AS ph INNER JOIN Person.Person AS p ON ph.BusinessEntityID = p.BusinessEntityID ГДЕ тел. ПО p.LastName; |
Выходные данные показывают, что указаны коды регионов, которые начинаются с 7 и заканчиваются на 8.
Использование SQL LIKE с подстановочными знаками []
Квадратные скобки e.g [] позволяют нам идентифицировать несколько одиночных символов, которые будут в этой конкретной позиции. Например, скажем, чтобы перечислить все строки, в которых первые имена третьего символа начинаются с I или K. Вместо написания нескольких условий LIKE мы можем поместить набор сопоставления с образцом в третью позицию и закрыть его в квадрате. Механизм запросов сначала ищет «I», а затем - «K».
Давайте выполним следующий оператор SQL
ВЫБРАТЬ стр.FirstName, p.LastName, PhoneNumber FROM Person.PersonPhone AS ph INNER JOIN Person.Person AS p ON ph.BusinessEntityID = p.BusinessEntityID ГДЕ тел. фамилия как «Ba [ik]%» ЗАКАЗАТЬ ПО p.LastName; |
Вышеупомянутый запрос можно переписать с помощью условия ИЛИ. Это больше похоже на условие ИЛИ.
ВЫБРАТЬ стр.FirstName, p.LastName, PhoneNumber FROM Person.PersonPhone AS ph INNER JOIN Person.Person AS p ON ph.BusinessEntityID = p.BusinessEntityID WHERE ph.Phone 7_8 LIKE .lastname, например «Bai%» или p.lastname, например, «Bak%») ЗАКАЗАТЬ ПО p.LastName; |
На выходе мы видим, что перечислены фамилии, в которых третий символ - «I» или «k».»
Следующий оператор SQL отображает все строки, в которых нет буквы, начинающейся с A – D, в первом символе их фамилии.a-d]% '
ЗАКАЗАТЬ ПО p.lastname;
Теперь, если я выполню вышеуказанный запрос, мы увидим, что все возвращаемые имена не содержат A, B, C или D в качестве первого символа.
Использование SQL NOT LIKE с подстановочными знаками []
Следующий оператор SQL находит всех лиц, у которых столбец имени содержит более 3 символов.
ВЫБРАТЬ DISTINCT имя ОТ Лиц.Человек ГДЕ имя НЕ НРАВИТСЯ '[a-z] [a-z] [a-z]'; |
В выводе перечислены только те имена, у которых длина имени больше 3
Использование SQL LIKE с предложением ESCAPE
В следующем операторе SQL предложение ESCAPE используется для экранирования символа «!», Чтобы отрицать значение «%», чтобы найти строку «100% Free» в столбце col1 временной таблицы.
ТАБЛИЦА УДАЛЕНИЯ, ЕСЛИ СУЩЕСТВУЕТ temp; CREATE TABLE temp (col1 VARCHAR (100)); GO INSERT INTO temp VALUES («ApexSQL Refactor - это 100% бесплатный инструмент для форматирования SQL»), («Задание ApexSQL только сегодня со скидкой 10-15%»); GO SELECT * FROM TEMP; SELECT * FROM temp WHERE col1 LIKE '% 100!% Free%' ESCAPE '!'; ГО |
В выводе перечислены только те значения, для которых шаблон поиска «100% Free» соответствует выражению col1.
Использование SQL LIKE с оператором CASE
Следующий оператор SQL извлекает всех сотрудников, у которых номера телефонов имеют формат из трех-трех-четырех цифр с дефисами между ними ( 999-999-9999 ). Затем образец сравнивается со столбцом номер телефона для получения внутренней или международной категории.
Выражение case оценивается для конкретного шаблона, чтобы получить тип категории телефона.
SELECT p.FirstName, p.LastName, PhoneNumber, CASE WHEN ph.PhoneNumber LIKE '[0-9] [0-9] [0-9] - [0-9] [0- 9] [0-9] - [0-9] [0-9] [0-9] [0-9] 'затем «Внутренний номер телефона» ELSE «Международный номер телефона» КОНЕЦ Номер телефона ОТ Person.PersonPhone AS тел. ВНУТРЕННЕЕ СОЕДИНЕНИЕ Person.Person AS p ON тел. BusinessEntityID = p.BusinessEntityID ЗАКАЗАТЬ ПО p.LastName; |
В выводе мы видим, что номер классифицируется как внутренний или международный. Столбец номер телефона вычисляется оператором LIKE с использованием квадратных скобок. Число от нуля до девяти в первой позиции символа оценивается на соответствие шаблону от нуля до девяти, любое число от нуля до девяти во второй позиции символа и третьем, а затем четвертая позиция символа должна быть тире, и аналогичная логика применяется к остальным персонажей.
Использование SQL LIKE с динамическим SQL
Следующий оператор SQL возвращает всех сотрудников, у которых фамилия соответствует шаблону Barb. Шаблон динамически создается и сравнивается с выражением.
DECLARE @ELastName VARCHAR (20) = 'Барб'; ВЫБРАТЬ п. Имя, п.LastName, a.City ОТ Person.Person p JOIN Person.Address a ON p.BusinessEntityID = a.AddressID ГДЕ p.LastName LIKE '%' + @ ELastName + '%'; |
В выходном списке совпадают строки для указанного шаблона Barb
Примечание. По умолчанию CHAR вставляет завершающие пробелы в зависимости от длины поля. Используйте RTRIM для подавления конечных пробелов, если вы используете тип данных char.
В следующем операторе SQL поле @eLastName имеет тип данных char. Вы можете увидеть использование функции RTRIM для обрезки конечных пробелов.
DECLARE @ELastName CHAR (20) = 'Барб'; SELECT p.FirstName, p.LastName, a.City FROM Person.Person p JOIN Person.Address a ON p.BusinessEntityID = a.AddressID WHERE p.Фамилия LIKE '%' + RTRIM (@ELastName) + '%'; |
Использование SQL Like с оператором IF
В следующем операторе SQL входное значение оценивается для конкретного шаблона в предложении условия с помощью оператора IF.
DECLARE @RuleName NVARCHAR (MAX) = 'SQL Sever 2019 CTP доступен для предварительного просмотра'; IF @RuleName LIKE 'SQL Sever [0-9]% CTP доступен для предварительного просмотра' PRINT 'valid input good!'; ELSE PRINT «недействительный товар!»; |
Входная строка оценивается для определенных шаблонов с использованием SQL, такого как выражение с подстановочными знаками, и возвращает допустимую входную строку.], которые доступны с оператором SQL LIKE. Это отличный метод поиска для сопоставления строки символов с указанными шаблонами или в тех случаях, когда мы не совсем уверены в том, что вы ищете, иначе говоря, нечеткий поиск. Доступные подстановочные знаки делают оператор LIKE более гибким. Надеюсь, вам понравилась эта статья об операторе SQL LIKE в SQL Server. Не стесняйтесь задавать любые вопросы в комментариях ниже.
Я технолог по базам данных с более чем 11-летним богатым практическим опытом работы с технологиями баз данных.Я сертифицированный специалист Microsoft и имею степень магистра компьютерных приложений.
Моя специальность заключается в разработке и внедрении решений высокой доступности и кроссплатформенной миграции БД. В настоящее время работают над технологиями SQL Server, PowerShell, Oracle и MongoDB.
Посмотреть все сообщения от Prashanth Jayaram
Последние сообщения от Prashanth Jayaram (посмотреть все)Оператор SQL LIKE - w3resource
НРАВИТСЯ Оператор
LIKE - это стандартный оператор ANSI / ISO для сравнения значения столбца с другим значением столбца или строкой в кавычках.Возвращает либо 1 (ИСТИНА), либо 0 (ЛОЖЬ)
.Оператор SQL LIKE применяется только к полю типа CHAR или VARCHAR, чтобы соответствовать шаблону.
Чтобы соответствовать шаблону из слова, с оператором LIKE могли использоваться специальные символы и подстановочные знаки.
Оператор LIKE может использоваться в любом допустимом операторе SQL, например ВЫБРАТЬ, ВСТАВИТЬ, ОБНОВЛЕНИЕ или УДАЛИТЬ.
Синтаксис:
ВЫБРАТЬ [* | column_list] FROM <имя_таблицы> WHERE выражение [НЕ] LIKE шаблон [ESCAPE escape_sequence]
Параметры:
Имя | Описание |
---|---|
список_столбец | Список столбцов таблицы. |
имя_таблицы | Имя таблицы. |
имя_столбца | Название столбца, который будет участвовать в действии с оператором LIKE. |
ГДЕ | Проверяет, соответствует ли выражение шаблону. И выражение, и шаблон могут быть любым допустимым выражением и оцениваются как строки. Используйте NOT LIKE, чтобы проверить, не соответствует ли строка шаблону. В шаблонах могут использоваться следующие подстановочные знаки SQL: |
Подстановочные знаки SQL :
Подстановочные знаки SQL можно использовать для поиска данных в таблице.
Подстановочные знаки SQL используются с оператором SQL LIKE.
Логический оператор NOT в операторе select может использоваться как оператор NOT LIKE с подстановочными знаками.
В SQL подстановочные знаки:
Подстановочные знаки | Описание | |
---|---|---|
% | Знак процента (%) представляет собой последовательность из 0 (нуля) или более символов. | |
Подчеркивание (_) | Знак подчеркивания (_) представляет собой одиночный символ.charlist] или [! charlist] | Он представляет собой любой одиночный символ, кроме charlist |
Графическое представление: Оператор SQL LIKE
Примеры: оператор SQL LIKE
Процент подстановочных знаков SQL (%)
Образец таблицы: заказчик
Чтобы получить cust_code, cust_name, cust_city и cust_country из таблицы customer со следующим условием -
1. «cust_name» должно начинаться с буквы «S»,
можно использовать следующий оператор SQL:
ВЫБЕРИТЕ cust_code, cust_name, cust_city, cust_country
ОТ заказчика
ГДЕ cust_name LIKE 'S%';
Выход:
CUST_CODE CUST_NAME CUST_CITY CUST_COUNTRY ---------- -------------------- --------------- ----- -------------- C00015 Стюарт Лондон Великобритания C00005 Сасикант Мумбаи Индия C00006 Шилтон Торенто Канада C00017 Шринивас Бангалор Индия C00012 Стивен Сан-Хосе США C00011 Сундария Ченнаи Индия
Процент подстановочных знаков SQL (%) с логическим НЕ
Пример таблицы: агенты
Чтобы получить все столбцы из таблицы «агенты» с условием -
1."имя_агента" не начинается с буквы "М",
можно использовать следующий оператор SQL:
ВЫБРАТЬ *
ОТ агентов
ГДЕ имя_агента НЕ НРАВИТСЯ "M%";
Выход:
AGENT_CODE AGENT_NAME КОМИССИЯ РАБОЧЕЙ_ЗОНЫ PHONE_NO COUNTRY ---------- -------------------- --------------- ----- ----- --------------- -------- A003 Алекс Лондон .13 075-12458969 A001 Subbarao Bangalore.14 077-12346674 A009 Бенджамин Хэмпшер .11 008-22536178 A007 Рамасундар Бангалор .15 077-25814763 A008 Элфорд Нью-Йорк .12 044-25874365 A011 Рави Кумар Бангалор .15 077-45625874 A010 Сантакумар Ченнаи .14 007-22388644 A012 Люсида Сан-Хосе .12 044-52981425 A005 Андерсон Брисбан.13 045-21447739 A004 Иван Торенто .15 008-22544166
Равно (=) по сравнению с КАК
Оператор равенства (=) является оператором сравнения и используется для проверки равенства в пределах двух чисел или выражений. Например:
ВЫБРАТЬ *
ОТ агентов
ГДЕ комиссия = .11;
Оператор LIKE проверяет, соответствует ли конкретная строка символов заданному шаблону. Например:
ВЫБРАТЬ *
ОТ агентов
WHERE agent_name LIKE 'Sant%'
LIKE обычно используется только со строками, а equals (=) используется для точного сопоставления и кажется более быстрым.
Пример: подстановочные знаки SQL, подчеркивание (_)
Символ подчеркивания (_) представляет один символ, соответствующий шаблону из слова или строки. Для соответствия шаблону из нескольких символов можно использовать более одного (_) символа подчеркивания.
Образец таблицы: заказчик
Чтобы получить cust_code, cust_name, cust_city и cust_country из таблицы customer со следующими условиями -
1. "cust_name" должно начинаться с буквы "R",
2.третья буква "cust_name" должна быть "m",
3. и вторая буква "cust_name" может быть любой,
можно использовать следующий оператор SQL:
ВЫБЕРИТЕ cust_code, cust_name, cust_city, cust_country
ОТ заказчика
ГДЕ cust_name LIKE 'R_m%';
Выход:
CUST_CODE CUST_NAME CUST_CITY CUST_COUNTRY ---------- -------------------- --------------- ----- -------------- C00007 Раманатан Ченнаи Индия C00009 Рамеш Мумбаи Индия
Подстановочные знаки SQL подчеркивание (_) несколько символов
Образец таблицы: заказчик
Чтобы получить cust_code, cust_name, cust_city и cust_country из таблицы customer со следующими условиями -
1.первые три буквы "cust_name" могут быть любой буквой
2. четвертая буква «cust_name» должна быть «l»
3. а остальные могут быть любыми
можно использовать следующий оператор SQL:
ВЫБЕРИТЕ cust_code, cust_name, cust_city, cust_country
ОТ заказчика
ГДЕ cust_name LIKE '___ l%';
Выход:
CUST_CODE CUST_NAME CUST_CITY CUST_COUNTRY ---------- -------------------- --------------- ----- ------------- C00023 Карл Лондон Великобритания C00006 Шилтон Торенто Канада
Подстановочные знаки SQL, подчеркивание (_) для определенной длины
Образец таблицы: заказчик
Чтобы получить cust_code, cust_name, cust_city и cust_country из таблицы customer со следующими условиями -
1.первые три буквы "cust_name" могут быть любой буквой
2. четвертая буква «cust_name» должна быть «l»
3. и строка должна состоять из 4 букв
можно использовать следующий оператор SQL:
ВЫБЕРИТЕ cust_code, cust_name, cust_city, cust_country
ОТ заказчика
ГДЕ cust_name LIKE '___l';
Выход:
CUST_CODE CUST_NAME CUST_CITY CUST_COUNTRY ---------- -------------------- --------------- ----- --------------- C00023 Карл Лондон Великобритания
Пример: подстановочные знаки SQL [charlist]
[список символов] WILDCARDS используются для представления любого отдельного символа в списке символов.abi]% ';
Пример: подстановочные знаки SQL [! Charlist]
Пример таблицы: агенты
Чтобы получить все строки из таблицы «агенты» с условием —
1. «имя_агента» не должно начинаться с буквы «a», «b» или «i»,
можно использовать следующий оператор SQL:
ВЫБРАТЬ *
ОТ агентов
ГДЕ имя_агента LIKE '[! Abi]%';
См. Нашу базу данных моделей
Практика выполнения упражнений SQL
Хотите улучшить статью выше? Публикуйте свои заметки / комментарии / примеры через Disqus.
Предыдущая: СУЩЕСТВУЕТ
Следующая: Подчеркивание (_)
СООТВЕТСТВУЕТ и LIKE в условиях SQL
Informix ® поддерживает МАТЧИ и LIKE в операторах SQL, а Microsoft ™ SQL SERVER поддерживает только оператор LIKE.
Оператор MATCHES в Informix использует звезда ( * ), вопросительный знак (? ) и квадратные скобки ( [] ) подстановочные знаки. В Оператор LIKE SQL SERVER предлагает процент (% ), подчеркивание ( _ ) и квадратные скобки ( [] ) подстановочные знаки:
(col СООТВЕТСТВУЕТ 'Smi *' И col НЕ СООТВЕТСТВУЕТ 'R? X [a-z]') (столбец КАК 'Smi%' И столбец НЕ КАК 'R_x [a-z]')
Оператор LIKE в SQL Server не возвращает истину с Столбцы CHAR / NCHAR, если шаблон LIKE представлен как строка UNICODE литерал (с префиксом N) и шаблон поиска соответствует значению в столбце (например, без подстановочного символа% в конце).Увидеть следующий тест:
СОЗДАТЬ ТАБЛИЦУ mytable (k INT, nc NCHAR (20)) ВСТАВИТЬ В mytable VALUES (1, N'abc ') SELECT * FROM mytable WHERE nc = 'abc' - возвращается одна строка SELECT * FROM mytable WHERE nc = N'abc '- возвращается одна строка SELECT * FROM mytable WHERE nc LIKE 'abc' - возвращается одна строка SELECT * FROM mytable WHERE nc LIKE N'abc '- строки не найдены SELECT * FROM mytable WHERE nc LIKE N'abc% '- возвращается одна строка
Это может быть проблемой, потому что драйвер SQL Server по умолчанию автоматически добавлять префикс N перед всеми строковыми литералами в SQL заявления.См. Microsoft SQL Документация по серверу для получения дополнительных сведений о семантике LIKE в отношении пустое заполнение и см. также данные CHARACTER типы для использования префикса N: вы можете подумать о настройке для параметра snc.widechar FGLPROFILE значение false, если вы с использованием типов CHAR / VARCHAR.
Решение
Драйвер базы данных может перевести Informix СОВПАДАЕТ выражения с выражениями LIKE, если нет скобки [] диапазоны символов используются в операнде MATCHES.
Однако для максимальной переносимости рассмотрите возможность замены выражений MATCHES выражениям LIKE во всех операторах SQL ваших программ.
Избегайте использования типов CHAR (N) для символьных данных переменной длины (например, имя, адрес).
Обратите внимание на префиксы строк UNICODE N ‘…’ в выражениях LIKE при использовании со столбцами CHAR / NCHAR. Вы можете всегда добавлять подстановочный знак% в конце условия LIKE, или используйте оператор равенства при выполнении запроса с точными значениями.
См. также: операторы MATCHES и LIKE.
SQL Like: введение и обзор логического оператора
SQL Like — это логический оператор, который используется для определения того, соответствует ли конкретная строка символов заданному шаблону. Обычно он используется в предложении Where для поиска указанного шаблона в столбце.
Этот оператор может быть полезен в случаях, когда нам нужно выполнить сопоставление с образцом вместо равенства или неравенства.SQL Like используется, когда мы хотим вернуть строку, если конкретная символьная строка соответствует указанному шаблону. Шаблон может представлять собой комбинацию обычных символов и подстановочных знаков.
Чтобы вернуть строку назад, обычные символы должны точно соответствовать символам, указанным в строке символов. Подстановочные знаки могут быть сопоставлены с произвольными частями символьной строки.
Давайте воспользуемся образцом базы данных AdventureWorks и рассмотрим несколько различных операторов SQL Like с подстановочными знаками «%» и «_».
Использование подстановочного знака% (представляет ноль, один или несколько символов)
Приведенный ниже запрос возвращает все телефонные номера с кодом зоны «415» в таблице «PersonPhone»:
ВЫБРАТЬ p.FirstName, p.LastName, ph.PhoneNumber FROM Person.PersonPhone AS ph INNER JOIN Person.Person AS p НА тел. BusinessEntityID = p.BusinessEntityID ГДЕ тел.PhoneNumber КАК ‘415%’ ЗАКАЗАТЬ от p.LastName; ГО |
Обратите внимание, что в предложении Where указан символ «415%». Это означает, что SQL Server будет искать число 415, за которым следует любая строка из нуля или более символов. Вот результат:
Оператор Not logic меняет значение любого логического выражения на противоположное. Итак, если мы просто укажем Not like с подстановочным знаком «%» в предложении SQL Like, добавим одно дополнительное условие и поместим его в тот же оператор, что и выше, мы должны получить такой запрос:
ВЫБРАТЬ стр.FirstName, p.LastName, ph.PhoneNumber ОТ Лиц. .FirstName = ‘Gail’ ЗАКАЗАТЬ ПО p.LastName; ГО |
На этот раз запрос вернул все записи в таблице «PersonPhone», которые имеют коды городов, отличные от 415:
Кроме того, предположим, что мы хотим найти все записи, в которых имя содержит «ssa».Мы можем использовать запрос ниже:
ВЫБРАТЬ p.FirstName, p.LastName FROM Person.Person AS p WHERE LastName LIKE ‘% ssa%’ ORDER BY p.LastName; ГО |
Обратите внимание, что, используя ‘%’ до и после «ssa», мы говорим SQL Server найти все записи, в которых «Person.Person» имеет символы «ssa», и не имеет значения, какие другие символы находятся до и после « ssa »:
Использование подстановочного знака «_» (представляет один символ)
Знак подчеркивания SQL Like e.грамм. „Используется, когда мы хотим проверить один символ, который может быть чем угодно, и предоставить остальные символы для нашего соответствия.
Предположим, что если мы хотим вернуть все записи, в которых первый символ таблицы «Имя» может быть любым, а остальные должны быть «en». Используйте запрос ниже:
SELECT p.FirstName, p.MiddleName FROM Person.Person p WHERE p.FirstName LIKE ‘_en’; ГО |
Вот результат:
Обратите внимание, что комбинация подстановочных знаков также может использоваться в конце шаблона поиска. Например, чтобы вернуть все телефонные номера с кодом города, начинающимся с 6 и заканчивающимся на 2 в таблице «PersonPhone», используйте следующий запрос:
ВЫБРАТЬ стр.PhoneNumber ОТ Person.PersonPhone pp ГДЕ pp.PhoneNumber КАК ‘6_2%’ GO |
Обратите внимание, что подстановочный знак «%» используется после символа подчеркивания, поскольку код города является первой частью телефонного номера, а дополнительные символы существуют после в значении столбца:
Использование квадратных скобок [] (любой отдельный символ в указанном диапазоне [a-t] или набор [abc])
Оператор SQL Like с квадратными скобками используется, когда мы хотим иметь диапазон.Допустим, мы хотим найти все строки, в которых первый символ «Имя» начинается с [a-f]. Используйте запрос ниже:
ВЫБЕРИТЕ BusinessEntityID, FirstName, LastName FROM Person.Person WHERE FirstName LIKE ‘[a-f]%’; ГО |
Как видно, мы использовали диапазон [a-f]%. Это означает, что нужно вернуть первый символ от a до f, а после этого любые символы подойдут, потому что после этого мы использовали «%»:
Чтобы вернуть любой отдельный символ в наборе, используйте приведенный ниже пример для поиска сотрудников в таблице «Человек» с именем Шерил или Шерил:
ВЫБЕРИТЕ BusinessEntityID, FirstName, LastName FROM Person.Человек ГДЕ Имя LIKE ‘[CS] heryl’; ГО |
В этом случае этот запрос вернет только Шерил, но он также вернул бы Шерил, если бы у нас были какие-либо записи в базе данных:
Вот еще один пример, когда у нас действительно смешанные результаты:
ВЫБЕРИТЕ Фамилию, Имя ОТ человека.] квадратные скобки (любой отдельный символ за пределами указанного диапазона [a-t] или набора [abc]) Как вы могли догадаться, это противоположность предыдущему использованию оператора SQL Like с квадратными скобками. Допустим, мы хотим вернуть все записи, в которых первый символ «Имя» не начинается с [от a до f]:
Обратите внимание, что он вернул только те записи, которые не начинаются с какого-либо символа от a до f: В данном примере, допустим, мы хотим получить все записи, в которых «FirstName» не начинается с a, d, j. Мы можем использовать запрос ниже:
Вот результат: Использование escape-предложенияЭто один из предикатов типа SQL, который используется для указания escape-символа. В приведенном ниже запросе используется предложение Escape и escape-символ:
Он возвращает точную строку символов 10-15% в столбце c1 таблицы mytbl2: Я надеюсь, что эта статья об операторе SQL Like была информативной, и благодарю вас за то, что вы ее прочитали. Боян, он же «Бокси», выпускник AP в области ИТ-технологий, специализирующийся на сетях и электронных технологиях Копенгагенской школы дизайна и технологий, является аналитиком программного обеспечения с опытом в области обеспечения качества, поддержки программного обеспечения, пропаганды продуктов и взаимодействия с пользователями. Он много писал о SQL Shack и ApexSQL Solution Center по самым разным темам, от клиентских технологий, таких как разрешение 4K и тематика, обработки ошибок до стратегий индексации и мониторинга производительности. Боян работает в ApexSQL в Нише, Сербия, как неотъемлемая часть команды, занимающейся проектированием, разработкой и тестированием следующего поколения инструментов баз данных, включая MySQL и SQL Server, а также автономных инструментов и интеграции с Visual Studio, SSMS. и VSCode. Подробнее о Бояне на LinkedIn Просмотреть все сообщения Бояна Петровича Последние сообщения Бояна Петровича (посмотреть все) . Оставить комментарий
|