Like sql: LIKE (Transact-SQL) — SQL Server

Содержание

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______’

В результате выполнения запроса будет выведена таблица с одной строкой:

Поделиться с друзьями

SQL условие LIKE — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

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

Описание

SQL условие LIKE позволяет использовать подстановочные символы для сопоставления с шаблоном в запросе. Условие LIKE используется в предложении WHERE оператора SELECT, INSERT, UPDATE или DELETE.

Синтаксис

Синтаксис для условия LIKE в SQL.

expression LIKE pattern [ ESCAPE ‘escapecharacter’ ]

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

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

СимволОбъяснение
%Позволяет сопоставить любую строку любой длины (включая нулевую длину)
_Позволяет сопоставить одиночный символ
ESCAPE ‘escapecharacter’
Необязательный. Это позволяет вам сопоставлять шаблоны с литеральными подстановочными символами, такими как % или _.

Пример — использование подстановочного символа

% в условии LIKE

Давайте рассмотрим, как подстановочный символ % работает в SQL условии LIKE. Помните, что подстановочный символ % соответствует любой строке любой длины (включая нулевую длину).
В этом первом примере мы хотим найти все записи в таблице customers, где last_name клиента начинается с ‘C’.
В этом примере у нас есть таблица customers со следующими данными:

customer_idfirst_namelast_namefavorite_website
4000JustinBiebergoogle.com
5000SelenaGomezbing.com
6000 MilaKunisyahoo.com
7000TomCruiseoracle.com
8000JohnnyDeppNULL
9000RussellCrowegoogle.com

Введите следующий SQL оператор.

SELECT *
FROM customers
WHERE last_name LIKE ‘C%’
ORDER BY last_name;



SELECT *

  FROM customers

WHERE last_name LIKE ‘C%’

ORDER BY last_name;

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

customer_idfirst_namelast_namefavorite_website
7000TomCruiseoracle.com
9000RussellCrowegoogle.com

В этом примере возвращаются записи таблицы customers, где last_name начинается с ‘C’. Как видите, были возвращены записи по фамилиям Cruise и Crowe.
Поскольку условие LIKE не чувствительно к регистру, следующий SQL оператор вернет те же результаты.

SELECT *
FROM customers
WHERE last_name LIKE ‘c%’
ORDER BY last_name;



SELECT *

  FROM customers

WHERE last_name LIKE ‘c%’

ORDER BY last_name;

Использование нескольких подстановочных символов

% в условии LIKE

Вы также можете использовать подстановочный символ % несколько раз с условием LIKE.
Используя ту же таблицу customers со следующими данными:

customer_idfirst_namelast_namefavorite_website
4000JustinBiebergoogle.com
5000SelenaGomezbing.com
6000 MilaKunisyahoo.com
7000TomCruiseoracle.com
8000JohnnyDeppNULL
9000RussellCrowegoogle.com

Попробуем найти все значения last_name из таблицы customers, где last_name содержит букву ‘e’.
Введите следующий SQL оператор:

SELECT last_name
FROM customers
WHERE last_name LIKE ‘%e%’
ORDER BY last_name;



SELECT last_name

  FROM customers

WHERE last_name LIKE ‘%e%’

ORDER BY last_name;

Будет выбрано 3 записей. Вот результаты, которые вы должны получить.

last_name
Bieber
Gomez
Depp

В этом примере фамилии Bieber, Gomez и Depp содержат букву ‘е’.

Пример — использование подстановочного символа

_ в условии LIKE

Далее рассмотрим, как подстановочный символ _ (символ подчеркивания) работает в условии LIKE. Помните, что подстановочный символ _ ищет ровно один символ, в отличие от подстановочного символа %.
Используя таблицу categories со следующими данными:

category_idcategory_name
25Deli
50Produce
75Bakery
100General Merchandise
125Technology

Попробуем найти все записи из таблицы categories, где category_id имеет длину 2 цифры и заканчивается на ‘5’. Введите следующий SQL оператор.


SELECT *
FROM categories
WHERE category_id LIKE ‘_5’;



SELECT *

  FROM categories

WHERE category_id LIKE ‘_5’;


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

category_idcategory_name
25Deli
75Bakery

В этом примере есть 2 записи, которые будут соответствовать шаблону — category_id со значениями 25 и 75. Обратите внимание, что category_id равный 125 не был выбран потому что символ _ соответствует только одному символу.

Использование нескольких подстановочных символов

_ в условии LIKE

Если вы хотите сопоставить трехзначное значение, заканчивающееся на «5», вам нужно будет использовать подстановочный символ _ два раза. Вы можете изменить свой запрос следующим образом.


SELECT *
FROM categories
WHERE category_id LIKE ‘__5’;



SELECT *

  FROM categories

WHERE category_id LIKE ‘__5’;


Теперь вы вернете значение category_id равное 125.

category_idcategory_name
125Technology

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

Далее давайте рассмотрим пример использования оператора NOT с условием LIKE.
В этом примере у нас есть таблица suppliers со следующими данными:

supplier_idsupplier_namecitystate
100YandexMoscowRussian
200GoogleLansingMichigan
300OracleRedwood CityCalifornia
400BingRedmondWashington
500YahooSunnyvaleWashington
600DuckDuckGoPaoliPennsylvania
700QwantParisFrance
800FacebookMenlo ParkCalifornia
900Electronic ArtsSan FranciscoCalifornia

Давайте посмотрим на все записи в таблице suppliers, где supplier_name не содержит литеру ‘o’. Введите следующий SQL оператор.


SELECT *
FROM suppliers
WHERE supplier_name NOT LIKE ‘%o%’;



SELECT *

  FROM suppliers

WHERE supplier_name NOT LIKE ‘%o%’;


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

supplier_idsupplier_namecitystate
100YandexMoscowRussian
300OracleRedwood CityCalifornia
400BingRedmondWashington
700QwantParisFrance

В этом примере в таблице suppliers есть четыре записи, в которых supplier_name не содержит литеру ‘o’.

Пример — использование escape-символов с условием LIKE

Важно понимать, как использовать «escape-символ» когда он соответствует шаблону. Вы можете экранировать % или _ и искать литеральные версии.
Допустим, вы хотели найти % как литерал в условии LIKE. Вы можете сделать это с помощью escape-символа. В нашем примере мы будем использовать ! как escape-символ в условии LIKE.
NOTE: Вы можете определить только escape-символ как один символ. Лучше всего выбрать такой символ, который не будет появляться в ваших данных очень часто, например ! или же #.
В этом примере мы имеем таблицу test со следующими данными:

test_idtest_value
110%
225%
3100
499

Мы могли бы вернуть все записи из таблицы test, где test_value содержит литерал %. Введите следующий SQL оператор.


SELECT *
FROM test
WHERE test_value LIKE ‘%!%%’ escape ‘!’;



SELECT *

  FROM test

WHERE test_value LIKE ‘%!%%’ escape ‘!’;


Вот результаты, которые вы должны получить.

test_idtest_value
110%
225%

В этом примере символ ! определяется как escape-символ. Первое и последнее значения % в условии LIKE рассматриваются как обычные подстановочные символы. !% является экранированным %, поэтому он рассматривается как литеральное значение %.
Вы можете дополнительно изменить приведенный выше пример и возвращать только те test_values, которые начинаются с 1 и содержат литерал %. Введите следующий SQL оператор:


SELECT *
FROM test
WHERE test_value LIKE ‘1%!%%’ escape ‘!’;



SELECT *

  FROM test

WHERE test_value LIKE ‘1%!%%’ escape ‘!’;


Вот результаты, которые вы должны получить.

Этот пример, на этот раз, вернет только одну запись. Потому что есть только один test_value, который начинается на 1 и содержит литерал %.

Руководство по SQL. Предикат LIKE. – PROSELYTE

Для сравнения символьных строк на схожесть с определённым шаблоном в языке структурированных запросов SQL используется предикат LIKE. Существует два вида шаблонов, которые используются вместе с LIKE:

  • Символ процента – ‘%’
  • Символ подчеркивания – ‘_’

Символ процента обозначает один или несколько символов, а знак подчёркивания – одно число, или символ. Мы можем использовать символы в различных комбинациях.

Общий вид запроса с использованием предиката LIKE имеет следующий вид:


SELECT FROM имя талицы
WHERE имя_колонки LIKE '%XXXX'

или

SELECT FROM имя талицы
WHERE имя_колонки LIKE '%XXXX%'

или

SELECT FROM имя талицы
WHERE имя_колонки LIKE'_XXXX'

В данном примере ХХХХ представлены символьными строками.
Мы также можем использовать операторы AND/OR для комбинирования нескольких условий.

Пример:

Предположим, что у нас есть таблица developers, которая содержит следующие записи:


+----+-------------------+------------+------------+--------+
| 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 с OR против IN

Есть ли какая-то разница в производительности между следующим?

NAME LIKE '%EXPRESSION_1%' 
OR NAME LIKE '%EXPRESSION_2%'
...
OR NAME LIKE '%EXPRESSION_N%'

VS

NAME IN (ACTUAL_VALUE_1,ACTUAL_VALUE_2,.., ACTUAL_VALUE_N)

sql

oracle11g

hql

query-performance

Поделиться

Источник


Divs    

22 февраля 2016 в 14:37

3 ответа


  • SQL Server 2005: использование оператора OR с оператором LIKE

    Как я могу использовать оператор LIKE с оператором OR в SQL Server 2005? Например: SELECT * FROM table WHERE column_name LIKE ‘%boo%’ OR ‘%bar%’ Это, кажется, не работает ! EDIT 1 : ОТВЕТ НА ПЕРВЫЙ ОПУБЛИКОВАННЫЙ ОТВЕТ: Круто, это работает ! но я только что впервые обнаружил, что ваши условия…

  • Использование LIKE с IN / OR в хранимой процедуре

    Я пытаюсь создать хранимую процедуру в SQL Server 2008, где я пытаюсь реплицировать простой запрос SELECT Col1, Col2 FROM Table WHERE Col1 LIKE ‘A%’ OR Col1 LIKE ‘B%’ OR Col1 LIKE ‘C%’ как CREATE PROCEDURE usp_MySP @ColValues varchar(100) = NULL AS SELECT Col1, Col2 FROM Table WHERE (@ColValues IS…



2

Версия IN потенциально намного, намного быстрее.

Эти две версии не делают одно и то же. Но, если любой из них соответствует вашим потребностям, версия IN может воспользоваться индексом на NAME . Версия LIKE не может, потому что шаблон начинается с подстановочного знака.

Вы могли бы написать это как:

WHERE NAME LIKE 'EXPRESSION_%' 

Если это соответствует вашим потребностям, он также может воспользоваться индексом на NAME .

Поделиться


Gordon Linoff    

22 февраля 2016 в 14:45



1

Вы можете просто попробовать использовать

NAME LIKE '%EXPRESSION_%' 

Что касается производительности, то IN сравнительно быстрее, чем OR. Кроме того, вы можете подтвердить производительность, используя план выполнения ваших двух запросов.

Кроме того, как было отмечено выше, два запроса, которые вы показываете, отличаются.

Первый запрос:

NAME LIKE '%EXPRESSION_1%' 
OR NAME LIKE '%EXPRESSION_2%'
...
OR NAME LIKE '%EXPRESSION_N%'

попытается получить результат, который содержит примерные данные, такие как

EXPRESSION_123
XXXEXPRESSION_1234
EXPRESSION_2323
EXPRESSION_2......

в то время как ваш второй запрос будет соответствовать записям, которые точно соответствуют

ACTUAL_VALUE_1,ACTUAL_VALUE_2.....

Поделиться


Rahul Tripathi    

22 февраля 2016 в 14:39



0

Если вы используете выражение переменной, которое может быть изменено в соответствии с заданным параметром. Затем использование

declare @Expression1 varchar(50)
Set @Expression2 = '%'+ @Expression1 +'%'


    NAME LIKE @Expression2

таким образом, какой бы параметр ни входил в @Expression1, он автоматически позаботится об этом.

Поделиться


Jai Prak    

22 февраля 2016 в 14:48


  • SQL Select IN против LIKE в предложении WHERE

    Какой из них быстрее по производительности? SELECT field1, field2, field3, field4 FROM MyTable WHERE field5 LIKE ‘%AL’ против SELECT field1, field2, field3, field4 FROM MyTable WHERE field5 IN (‘AAL’, ‘IAL’) или это не имеет никакого значения?

  • Эффективность SQL — [=] против [В] против [как] против [матчи]

    Просто из любопытства мне было интересно, есть ли какие-либо различия в скорости/эффективности использования синтаксиса [ = ] по сравнению с [ in ] по сравнению с [ like ] по сравнению с [ matches ] (только для 1 значения) для sql. select field from table where field = value; против select field…


Похожие вопросы:

Существует ли комбинация «LIKE» и «IN» в SQL?

В SQL мне (к сожалению) часто приходится использовать условия LIKE из-за баз данных, которые нарушают почти все правила нормализации. Я не могу изменить это прямо сейчас. Но это не имеет отношения…

Объединение LIKE с IN в SQL

Вместо выполнения: SELECT в FROM б WHERE в LIKE ‘a%’ OR а LIKE ‘b%’ OR а LIKE ‘c%’ есть ли способ выполнить что-то, функционирующее подобно этому псевдокоду? SELECT в FROM б WHERE в IN (‘a%’, ‘b%’,…

SQL где предложение с LIKE и IN

Итак, у меня есть ужасный запрос о том, что current существует в MS Access, который я пытаюсь переписать в SQL Server. В основном я получаю данные из текстового файла, который пытаюсь отфильтровать…

SQL Server 2005: использование оператора OR с оператором LIKE

Как я могу использовать оператор LIKE с оператором OR в SQL Server 2005? Например: SELECT * FROM table WHERE column_name LIKE ‘%boo%’ OR ‘%bar%’ Это, кажется, не работает ! EDIT 1 : ОТВЕТ НА ПЕРВЫЙ…

Использование LIKE с IN / OR в хранимой процедуре

Я пытаюсь создать хранимую процедуру в SQL Server 2008, где я пытаюсь реплицировать простой запрос SELECT Col1, Col2 FROM Table WHERE Col1 LIKE ‘A%’ OR Col1 LIKE ‘B%’ OR Col1 LIKE ‘C%’ как CREATE…

SQL Select IN против LIKE в предложении WHERE

Какой из них быстрее по производительности? SELECT field1, field2, field3, field4 FROM MyTable WHERE field5 LIKE ‘%AL’ против SELECT field1, field2, field3, field4 FROM MyTable WHERE field5 IN…

Эффективность SQL — [=] против [В] против [как] против [матчи]

Просто из любопытства мне было интересно, есть ли какие-либо различия в скорости/эффективности использования синтаксиса [ = ] по сравнению с [ in ] по сравнению с [ like ] по сравнению с [ matches ]…

Сократите синтаксис SQL предложения LIKE до in

В SQL есть ли какой-нибудь способ сократить синтаксис из Select * from TableName where ColumnName like ‘%A%’ or ColumnName like ‘%B’ or ColumnName like ‘C%’ К Select * from TableName where…

sql запрос с комбинацией like и or

Мне нужно сделать что-то вроде этого запроса sql, но в codeigniter: SELECT `table`.* FROM (`table`) WHERE `name` LIKE ‘%9%’ OR `id` LIKE ‘%9%’ AND (`name` LIKE ‘%f%’ OR `id` LIKE ‘%f%’) Я пытался…

Как использовать like, or и when с orderby в sql

Нужно выбрать по ‘codevalue’ на основе подобного шаблона , а затем упорядочить их в определенном порядке . Я сделал следующий запрос, но sql через ошибку msg Неправильный синтаксис рядом с ключевым…

Использование условия 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 — Оператор LIKE

Класс 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_'

 

Вы можете объединить N число условий с помощью операторов AND или OR. Здесь XXXX может быть любым числовым или строковым значением.

Пример

Следующая таблица содержит несколько примеров, показывающих, часть WHERE, имеющий LIKE с комбинациями знаков «_» «%»

Sr.No.Заявление и описание
1WHERE SALARY LIKE ‘200%’

Находит все значения, которые начинаются с 200.

2WHERE SALARY LIKE ‘%200%’

Находит все значения, которые имеют 200 в любом положении.

3WHERE SALARY LIKE ‘_00%’

Находит все значения, которые имеют 00 во второй и третьей позиции.

4WHERE SALARY LIKE ‘2_%_%’

Находит все значения, которые начинаются с 2, и по меньшей мере, 3-х символов в длину.

5WHERE SALARY LIKE ‘%2’

Находит любые значения, которые заканчиваются на цифру 2.

6WHERE SALARY LIKE ‘2%3’

Находит любые значения, которые имеют 2 во втором положении и в конце значение 3.

7WHERE SALARY LIKE ‘2___3’

Находит любые значения в пять-значным числом, которые начинаются на 2 и заканчивается на 3.

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

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Maxim    |  35 | Moscow    | 21000.00 |
|  2 | AndreyEx |  38 | Krasnodar | 55500.00 |
|  3 | Oleg     |  33 | Rostov    | 34000.00 |
|  4 | Masha    |  35 | Moscow    | 31500.00 |
|  5 | Ruslan   |  34 | Omsk      | 43000.00 |
|  6 | Dima     |  32 | SP        | 45000.00 |
|  7 | Roma     |  34 | SP        | 10000.00 |
+----+----------+-----+-----------+----------+

 

Ниже приведен пример, который будет отображать все записи из таблицы клиентов, где SALARY начинается с 4.

SQL> SELECT * FROM CUSTOMERS
WHERE SALARY LIKE '4%';

 

Это выдаст следующий результат:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ruslan   |  34 | Omsk      | 43000.00 |
|  3 | Dima     |  32 | SP        | 45000.00 |
+----+----------+-----+-----------+----------+

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Есть ли в SQL комбинация «LIKE» и «IN»?

Я знаю, что очень поздно, но у меня была похожая ситуация. Мне понадобился оператор «Like In» для набора хранимых процедур, который принимает много параметров, а затем использует эти параметры для агрегирования данных из нескольких систем RDBMS, поэтому никакие специфичные для RDBMS приемы не будут работать, однако хранимая процедура и любые функции будет работать на MS SQL Server, поэтому мы можем использовать T-SQL для функциональности генерации полных операторов SQL для каждой СУБД, но выходные данные должны быть достаточно независимыми от СУБД.

Это то, что я на данный момент придумал, чтобы превратить разделенную строку (например, параметр, входящий в хранимую процедуру) в блок SQL. Я называю это «лишайником» для «LIKE IN». Возьми?

Lichen.sql

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =======================================================================
-- Lichen - Scalar Valued Function
-- Returns nvarchar(512) of "LIKE IN" results.  See further documentation.
-- CREATOR: Norman David Cooke
-- CREATED: 2020-02-05
-- UPDATED:
-- =======================================================================
CREATE OR ALTER FUNCTION Lichen 
(
    -- Add the parameters for the function here
    @leadingAnd bit = 1,
    @delimiter nchar(1) = ';',
    @colIdentifier nvarchar(64),
    @argString nvarchar(256)
)
RETURNS nvarchar(512)
AS
BEGIN
    -- Declare the return variable here
    DECLARE @result nvarchar(512)

    -- set delimiter to detect (add more here to detect a delimiter if one isn't provided)
    DECLARE @delimit nchar(1) = ';'
    IF NOT @delimiter = @delimit 
        SET @delimit = @delimiter


    -- check to see if we have any delimiters in the input pattern
    IF CHARINDEX(@delimit, @argString) > 1  -- check for the like in delimiter
    BEGIN  -- begin 'like in' branch having found a delimiter
        -- set up a table variable and string_split the provided pattern into it.
        DECLARE @lichenTable TABLE ([id] [int] IDENTITY(1,1) NOT NULL, line NVARCHAR(32))
        INSERT INTO @lichenTable SELECT * FROM STRING_SPLIT(@argString, ';')

        -- setup loop iterators and determine how many rows were inserted into lichen table
        DECLARE @loopCount int = 1
        DECLARE @lineCount int 
        SELECT @lineCount = COUNT(*) from @lichenTable

        -- select the temp table (to see whats inside for debug)
        --select * from @lichenTable

        -- BEGIN AND wrapper block for 'LIKE IN' if bit is set
        IF @leadingAnd = 1
            SET @result = ' AND ('
        ELSE
            SET @result = ' ('

        -- loop through temp table to build multiple "LIKE 'x' OR" blocks inside the outer AND wrapper block
        WHILE ((@loopCount IS NOT NULL) AND (@loopCount <= @lineCount))
        BEGIN -- begin loop through @lichenTable
            IF (@loopcount = 1) -- the first loop does not get the OR in front
                SELECT @result = CONCAT(@result, ' ', @colIdentifier, ' LIKE ''', line, '''') FROM @lichenTable WHERE id = @loopCount
            ELSE  -- but all subsequent loops do
                SELECT @result = CONCAT(@result, ' OR ', @colIdentifier, ' LIKE ''', line, '''') FROM @lichenTable WHERE id = @loopCount
            SET @loopcount = @loopCount + 1     -- increment loop
        END -- end loop through @lichenTable

        -- set final parens after lichenTable loop
        SET @result = CONCAT(@result, ' )')
    END  -- end 'like in' branch having found a delimiter
    ELSE -- no delimiter was provided
    BEGIN   -- begin "no delimiter found" branch
        IF @leadingAnd = 1 
            SET @result = CONCAT(' AND ', @colIdentifier, ' LIKE ''' + @argString + '''')
        ELSE
            SET @result = CONCAT(' ', @colIdentifier, ' LIKE ''' + @argString + '''')
    END     -- end "no delimiter found" branch

    -- Return the result of the function
    RETURN @result
END  -- end lichen function

GO

Обнаружение разделителя возможно запланировано, но сейчас по умолчанию используется точка с запятой, так что вы можете просто вставить его defaultтуда. В этом, вероятно, есть ошибки. @leadingAndПараметр только немного значение , чтобы определить , если вы хотите , ведущий «И» положить в передней части блока , так что прекрасно вписывается в другие предложения WHERE добавлений.

Пример использования (с разделителем в argString)

SELECT [dbo].[Lichen] (
   default        -- @leadingAND, bit, default: 1
  ,default        -- @delimiter, nchar(1), default: ';'
  ,'foo.bar'      -- @colIdentifier, nvarchar(64), this is the column identifier
  ,'01%;02%;%03%' -- @argString, nvarchar(256), this is the input string to parse "LIKE IN" from
)
GO

Вернет nvarchar (512), содержащий:

 AND ( foo.bar LIKE '01%' OR foo.bar LIKE '02%' OR foo.bar LIKE '%03%' ) 

Он также пропустит блок, если на входе нет разделителя:

Пример использования (без разделителя в argString)

SELECT [dbo].[Lichen] (
   default        -- @leadingAND, bit, default: 1
  ,default        -- @delimiter, nchar(1), default: ';'
  ,'foo.bar'      -- @colIdentifier, nvarchar(64), this is the column identifier
  ,'01%'          -- @argString, nvarchar(256), this is the input string to parse "LIKE IN" from
)
GO

Вернет nvarchar (512), содержащий:

 AND foo.bar LIKE '01%'

Я собираюсь продолжить работу над этим, поэтому, если я что-то упустил (явно очевидное или иное), пожалуйста, не стесняйтесь комментировать или обратиться.

SQL Like: введение и обзор логического оператора

SQL Like — это логический оператор, который используется для определения того, соответствует ли конкретная строка символов заданному шаблону. Обычно он используется в предложении Where для поиска указанного шаблона в столбце.

Этот оператор может быть полезен в случаях, когда нам нужно выполнить сопоставление с образцом вместо равенства или неравенства. SQL Like используется, когда мы хотим вернуть строку, если конкретная символьная строка соответствует указанному шаблону.Шаблон может представлять собой комбинацию обычных символов и подстановочных знаков.

Чтобы вернуть строку назад, обычные символы должны точно соответствовать символам, указанным в строке символов. Подстановочные знаки могут быть сопоставлены с произвольными частями символьной строки.

Давайте воспользуемся образцом базы данных AdventureWorks и рассмотрим несколько разных операторов SQL Like с подстановочными знаками «%» и «_».

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

Приведенный ниже запрос возвращает все телефонные номера с кодом зоны «415» в таблице «PersonPhone»:

ВЫБРАТЬ стр.FirstName, p.LastName, ph.PhoneNumber

ОТ Лиц. автор: p.LastName;

ГО

Обратите внимание, что в предложении Where указан символ «415%». Это означает, что SQL Server будет искать число 415, за которым следует любая строка из нуля или более символов.Вот результат:

Оператор Not logic меняет значение любого логического выражения на противоположное. Итак, если мы просто укажем Not like с подстановочным знаком «%» в предложении SQL Like, добавим одно дополнительное условие и поместим его в тот же оператор, что и выше, мы должны получить такой запрос:

ВЫБРАТЬ p.FirstName, p.LastName, ph.PhoneNumber

ОТ Лиц.PersonPhone AS ph

ВНУТРЕННЕЕ СОЕДИНЕНИЕ Person.Person AS p

НА тел. BusinessEntityID = p.BusinessEntityID

ГДЕ ph.PhoneNumber НЕ КАК ‘415%’ И p.FirstName = ‘Gail’

ORDER BY 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.грамм. „Используется, когда мы хотим проверить один символ, который может быть чем угодно, и предоставить остальные символы для нашего соответствия.

Предположим, что если мы хотим вернуть все записи, в которых первый символ таблицы «FirstName» может быть любым, а остальные должны быть «en». Используйте запрос ниже:

ВЫБРАТЬ 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]:

ВЫБЕРИТЕ BusinessEntityID, FirstName, LastName

FROM Person.а-е]% ‘;

ГО

Обратите внимание, что он вернул только те записи, которые не начинаются с какого-либо символа от a до f:

В данном примере, допустим, мы хотим получить все записи, в которых «FirstName» не начинается с a, d, j. Мы можем использовать запрос ниже:

ВЫБЕРИТЕ BusinessEntityID, FirstName, LastName

FROM Person.adj]% ‘;

ГО

Вот результат:

Использование escape-предложения

Это один из предикатов типа SQL, который используется для указания escape-символа. В приведенном ниже запросе используется предложение Escape и escape-символ:

1

2

3

4

5

6

7

8

9

10

11

12

13

140002

14

18

USE tempdb;

GO

ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ TABLE_NAME

FROM INFORMATION_SCHEMA.ТАБЛИЦЫ

WHERE TABLE_NAME = ‘mytbl2’)

DROP TABLE mytbl2;

GO

USE tempdb;

GO

СОЗДАТЬ ТАБЛИЦУ mytbl2 (c1 SYSNAME);

GO

ВСТАВЬТЕ В mytbl2

ЗНАЧЕНИЯ («Скидка 10-15%»), («Скидка 0,10–15%»);

GO

SELECT c1

FROM mytbl2

WHERE c1 LIKE ‘% 10-15 @% off%’ ESCAPE ‘@’;

ГО

Он возвращает точную строку символов 10-15% в столбце c1 таблицы mytbl2:

Я надеюсь, что эта статья об операторе SQL Like была информативной, и благодарю вас за то, что вы ее прочитали.

Боян, он же «Бокси», выпускник AP в области ИТ-технологий, специализирующийся на сетях и электронных технологиях Копенгагенской школы дизайна и технологий, является аналитиком программного обеспечения с опытом в области обеспечения качества, поддержки программного обеспечения, пропаганды продуктов и взаимодействия с пользователями.

Он много писал о SQL Shack и ApexSQL Solution Center по самым разным темам, от клиентских технологий, таких как разрешение 4K и тематика, обработки ошибок до стратегий индексации и мониторинга производительности.

Боян работает в ApexSQL в Нише, Сербия, как неотъемлемая часть команды, занимающейся проектированием, разработкой и тестированием следующего поколения инструментов баз данных, включая MySQL и SQL Server, а также автономных инструментов и интеграции с Visual Studio, SSMS. и VSCode.

Подробнее о Бояне на LinkedIn

Просмотреть все сообщения Бояна Петровича

Последние сообщения Бояна Петровича (посмотреть все)

Как использовать 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

Начиная с этого места? Этот урок является частью полного руководства по использованию SQL для анализа данных. Проверьте начало.

В этом уроке мы рассмотрим:

Оператор SQL LIKE

LIKE — это логический оператор в SQL, который позволяет вам сопоставлять похожие значения, а не точные.

В этом примере результаты из набора данных Billboard Music Charts будут включать строки, для которых «группа» начинается с «Snoop» и сопровождается любым числом и выбранными символами.

Запустите код, чтобы увидеть, какие результаты возвращаются.

  ВЫБРАТЬ *
  ИЗ tutorial.billboard_top_100_year_end
 ГДЕ "группа" КАК "Snoop%"
  

Примечание: «группа» появляется в цитатах выше, потому что ГРУППА на самом деле является именем функции в SQL.Двойные кавычки (в отличие от одинарных: ') указывают на то, что вы имеете в виду имя столбца «группа» , а не функцию SQL. Как правило, двойные кавычки вокруг слова или фразы указывают на то, что вы имеете в виду это имя столбца.

Подстановочные знаки и ILIKE

% , использованное выше, представляет любой символ или набор символов. В этом случае % упоминается как «подстановочный знак». В типе SQL, который использует Mode, LIKE чувствителен к регистру, что означает, что указанный выше запрос будет захватывать только те совпадения, которые начинаются с заглавной «S» и строчной буквы «noop».»Чтобы игнорировать регистр при сопоставлении значений, можно использовать команду ILIKE :

  ВЫБРАТЬ *
  ИЗ tutorial.billboard_top_100_year_end
 ГДЕ "группа" ILIKE 'snoop%'
  

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

  ВЫБРАТЬ *
  ИЗ tutorial.billboard_top_100_year_end
 ГДЕ художник ILIKE 'dr_ke'
  

Отточите свои навыки SQL

Практическая задача

Напишите запрос, который возвращает все строки, для которых Ludacris был членом группы.

Попробуй это
Посмотреть ответ

Практическая задача

Напишите запрос, который возвращает все строки, для которых первый исполнитель, указанный в группе, имеет имя, начинающееся с «DJ».

Попробуй это
Посмотреть ответ

Оператор 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.

Предыдущая: СУЩЕСТВУЕТ
Следующая: Подчеркивание (_)

Использование оператора SQL LIKE для запроса данных на основе шаблонов

Резюме : в этом руководстве мы покажем вам, как использовать оператор SQL LIKE для запроса данных на основе шаблонов.

Введение в оператор SQL LIKE

Оператор LIKE позволяет искать строку текста на основе заданного шаблона. Вы можете использовать оператор LIKE в предложении WHERE любого допустимого оператора SQL, такого как SELECT, UPDATE или DELETE.

SQL предоставляет два подстановочных символа, которые позволяют создавать шаблоны. Эти два символа подстановки — процент (%) и знак подчеркивания (_).

  • Подстановочный знак процента (%) соответствует последовательности любого символа, включая пробел.
  • Подстановочный знак подчеркивания (_) соответствует любому одиночному символу.

Синтаксис оператора LIKE при использовании с оператором SELECT следующий:

 

SELECT столбец1, столбец2 ИЗ стол КУДА столбец LIKE pattern;

Тип данных столбца в предложении WHERE должен быть буквенно-цифровым e.g., char , varchar и т. д., чтобы использовать оператор LIKE .

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

Давайте рассмотрим несколько примеров использования оператора LIKE .

Оператор SQL LIKE с подстановочным знаком процента (%) Примеры

Предположим, вы хотите найти сотрудника, чья фамилия начинается с буквы D , вы можете использовать следующий запрос.

 

ВЫБРАТЬ фамилия Имя ИЗ сотрудники КУДА фамилия КАК 'D%'

Язык кода: JavaScript (javascript)

Шаблон «D%» соответствует любой строке, которая начинается с символа «D» и заканчивается любыми символами.

Чтобы найти сотрудников, имена которых заканчиваются на «t», вы можете выполнить следующий запрос:

 

SELECT фамилия Имя ИЗ сотрудники КУДА firstname LIKE '% t'

Язык кода: JavaScript (javascript)

Шаблон «% t» соответствует любой строке, которая заканчивается символом «t».

Вы можете поместить подстановочный знак «%» в начало и конец строки, чтобы соответствовать любой строке, содержащей строку внутри подстановочных знаков.Например, чтобы найти сотрудников, чьи фамилии содержат строку 'll ‘, вы можете использовать следующий запрос:

 

SELECT фамилия Имя ИЗ сотрудники КУДА lastname LIKE '% ll%'

Язык кода: JavaScript (javascript)

Пример комбинации двух подстановочных знаков

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

 

SELECT фамилия Имя ИЗ сотрудники КУДА фамилия LIKE '_a%'

Язык кода: JavaScript (javascript)

Оператор SQL LIKE с оператором NOT

Оператор LIKE можно объединить с оператором NOT , чтобы найти любую строку, которая не соответствует указанный шаблон.Предположим, вы хотите найти сотрудников, имя которых не начинается с символа «D», вы можете выполнить следующий запрос:

 

SELECT фамилия Имя ИЗ сотрудники КУДА фамилия НЕ КАК 'D%'

Язык кода: JavaScript (javascript)

Экранирующие символы подстановки

Если шаблон, который вы хотите сопоставить, содержит подстановочные знаки, например, 5% или _10. Чтобы использовать этот шаблон, вам нужно экранировать символы подстановки в шаблоне.

В разных продуктах баз данных есть разные способы экранирования подстановочных знаков (%, _ ) в шаблоне. Наиболее распространенные способы избежать использования подстановочных знаков — использовать обратную косую черту (\) или предложение ESCAPE.

В следующем примере показано, как избежать подстановочного символа с помощью символа обратной косой черты (\):

 

столбец LIKE '% \ _ 10%'

Язык кода: JavaScript (javascript)

The ESCAPE Предложение позволяет вам указать escape-символ по вашему выбору, а не символ обратной косой черты.Например, в следующем примере в качестве escape-символа используется @ :

 

столбец LIKE '% 20 @%' ESCAPE '@';

Язык кода: JavaScript (javascript)

Шаблон % 20 @% соответствует любой строке, которая заканчивается на 20%.

В этом руководстве вы узнали, как использовать оператор LIKE для поиска строки текста, соответствующей шаблону. Вы также узнали, как использовать символы подстановки в процентах (%) и подчеркивание (_) для построения шаблонов для использования с оператором LIKE .

SQL LIKE

Резюме : в этом руководстве вы узнаете, как использовать оператор SQL LIKE для проверки соответствия выражения шаблону.

Введение в оператор LIKE в SQL

Иногда полезно проверить, соответствует ли выражение определенному шаблону, например, чтобы найти всех сотрудников, имена которых начинаются с Da или Sh . В этих случаях необходимо использовать оператор LIKE .

Оператор LIKE проверяет, соответствует ли выражение определенному шаблону.См. Следующий синтаксис:

 

выражение LIKE pattern

Язык кода: SQL (язык структурированных запросов) (sql)

Если выражение соответствует шаблону, оператор LIKE возвращает истину. В противном случае возвращается false.

Оператор LIKE часто используется в предложении WHERE операторов SELECT , UPDATE и DELETE .

Для создания шаблона используются два подстановочных символа SQL:

  • % знак процента соответствует нулю, одному или нескольким символам
  • _ знак подчеркивания соответствует одному символу.

В следующей таблице показаны некоторые паттерны и их значения:

Выражение Значение
LIKE 'Kim%' Начинается с % Kim
LIKE
L er ‘ Заканчивается на er
LIKE '% ch% ' Содержит ch
LIKE ' Le_ ' Начинается с Le , за которым следует не более одного персонаж e.g., Les, Len…
LIKE '_uy' Заканчивается на uy и ему предшествует не более одного символа, например, guy
LIKE '% are_' Содержит равны , начинаются с любого количества символов и заканчиваются не более чем одним символом
LIKE '_are%' Содержит - это , начинается не более чем одним символом и заканчивается любым количеством символов

Если вы хотите сопоставить подстановочные знаки% или _, вы должны использовать символ обратной косой черты \, чтобы его избежать.Если вы хотите использовать другой escape-символ, а не обратную косую черту, используйте предложение ESCAPE в выражении LIKE следующим образом:

 

выражение LIKE шаблон ESCAPE escape_character

Язык кода: SQL (язык структурированных запросов ) (sql)

Примеры оператора SQL LIKE

Мы будем использовать таблицу сотрудников в примере базы данных для демонстрации.

Чтобы найти всех сотрудников, имена которых начинаются с Da , используйте шаблон Da% , как показано в следующем заявлении:

 

SELECT employee_id, имя, фамилия ИЗ сотрудники КУДА first_name LIKE 'Da%';

Язык кода: SQL (язык структурированных запросов) (sql)

Посмотрите в действии

Чтобы найти всех сотрудников, чьи имена заканчиваются на er , используйте шаблон % er следующим образом:

 

ВЫБРАТЬ employee_id, имя, фамилия ИЗ сотрудники КУДА first_name LIKE '% er';

Язык кода: SQL (язык структурированных запросов) (sql)

Посмотреть в действии

Следующий оператор находит всех сотрудников, чьи фамилии содержат слово и :

 

SELECT employee_id, имя, фамилия ИЗ сотрудники КУДА last_name LIKE '% an%';

Язык кода: SQL (язык структурированных запросов) (sql)

Посмотреть в действии

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

 

ВЫБРАТЬ employee_id, имя, фамилия ИЗ сотрудники КУДА first_name LIKE 'Jo__';

Язык кода: SQL (язык структурированных запросов) (sql)

Посмотреть в действии

Следующий оператор выбирает сотрудников, имена которых начинаются с любого количества символов и за которыми следует не более одного символа.

 

ВЫБРАТЬ employee_id, имя, фамилия ИЗ сотрудники КУДА first_name LIKE '% are_';

Язык кода: SQL (язык структурированных запросов) (sql)

Посмотреть в действии

Оператор SQL NOT LIKE

Чтобы отменить результат оператора LIKE , используйте оператор NOT следующим образом :

 

выражение НЕ КАК шаблон ESCAPE escape_character

Язык кода: SQL (язык структурированных запросов) (sql)

Например, чтобы найти всех сотрудников, имена которых начинаются с S , но не начинаются с Sh , вы используете следующий оператор:

 

SELECT employee_id, имя, фамилия ИЗ сотрудники КУДА first_name КАК 'S%' И first_name НЕ НРАВИТСЯ "Sh%" СОРТИРОВАТЬ ПО имя;

Язык кода: SQL (язык структурированных запросов) (sql)

Посмотреть в действии

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

Было ли это руководство полезным?

SQL LIKE Operator — Учебник Республика

В этом руководстве вы узнаете, как получить данные на основе частичного совпадения.

Сопоставление с образцом

До сих пор вы видели условия, которые определяют точную строку, например ГДЕ name = 'Lois Lane' . Но в SQL вы также можете выполнить частичное сопоставление или сопоставление с образцом, используя оператор LIKE .

Оператор LIKE обеспечивает меру сопоставления с образцом, позволяя указывать подстановочные знаки для одного или нескольких символов. Вы можете использовать следующие два подстановочных символа:

  • Знак процента (% ) — соответствует любому количеству символов, даже нулю.
  • Подчеркивание ( _ ) — соответствует ровно одному символу

Вот несколько примеров, показывающих, как использовать оператор LIKE с подстановочными знаками.

Заявление Значение Возвращенных значений
ГДЕ имя КАК 'Da%' Найти имена, начинающиеся с Да Дэвид, Дэвидсон
ГДЕ имя КАК '% th' Найти имена, заканчивающиеся на th Элизабет, Смит
ГДЕ имя LIKE '% on%' Найдите имена, содержащие на Дэвидсон, Тони
ГДЕ имя КАК 'Sa_' Найти имена, начинающиеся с Sa , за которыми следует не более одного символа Сэм
ГДЕ имя КАК '_oy' Найти имена, заканчивающиеся на oy , которым предшествует не более одного символа Джой, Рой
ГДЕ имя LIKE '_an_' Найдите имена, содержащие и , которые начинаются и заканчиваются не более чем одним символом Дана, Ханс
ГДЕ имя КАК '% ar_' Найти имена, содержащие ar , начинающиеся с любого количества символов и заканчивающиеся не более чем одним символом Ричард, Карл
ГДЕ имя LIKE '_ar%' Найти имена, содержащие ar , начинающиеся не более чем с одного символа и заканчивающиеся любым количеством символов Карл, Мария

Давайте применим утверждения, которые мы обсуждали выше, на практике, выполнив поиск в некоторых записях.

Допустим, у нас есть таблица сотрудников в нашей базе данных со следующими записями:

+ -------- + ------------------ + ------------ + -------- + --------- +
| emp_id | emp_name | найм_дата | зарплата | dept_id |
+ -------- + ------------------ + ------------ + -------- + --------- +
| 1 | Итан Хант | 2001-05-01 | 5000 | 4 |
| 2 | Тони Монтана | 2002-07-15 | 6500 | 1 |
| 3 | Сара Коннор | 2005-10-18 | 8000 | 5 |
| 4 | Рик Декард | 2007-01-03 | 7200 | 3 |
| 5 | Мартин Бланк | 2008-06-24 | 5600 | NULL |
| 6 | бистро simons | 2009-04-01 | 6000 | 1 |
+ -------- + ------------------ + ------------ + -------- + --------- +
 

Теперь предположим, что вы хотите узнать всех сотрудников, чьи имена начинаются с буквы S.

  ВЫБРАТЬ * ИЗ сотрудников
ГДЕ emp_name LIKE 'S%';  

После выполнения запроса вы получите примерно такой результат:

+ -------- + ------------------ + ------------ + -------- + --------- +
| emp_id | emp_name | найм_дата | зарплата | dept_id |
+ -------- + ------------------ + ------------ + -------- + --------- +
| 3 | Сара Коннор | 2005-10-18 | 8000 | 5 |
| 6 | бистро simons | 2009-04-01 | 6000 | 1 |
+ -------- + ------------------ + ------------ + -------- + --------- +
 

В недвоичных строках MySQL ( CHAR , VARCHAR , TEXT ) сравнения по умолчанию нечувствительны к регистру, тогда как сравнения двоичных строк ( BINARY , VARBINARY , BLOB ) чувствительны к регистру.

Это означает, что если вы выполняете поиск с WHERE name LIKE 'S%' , вы получите все значения столбцов, которые начинаются с S или s (как вы можете видеть, у нас есть и «Сара», и «Саймонс»). Однако, если вы хотите сделать этот поиск чувствительным к регистру, вы можете использовать оператор BINARY следующим образом:

  - Синтаксис для базы данных MySQL
ВЫБРАТЬ * ИЗ сотрудников
ГДЕ BINARY emp_name LIKE 'S%';  

Теперь этот оператор вернет только тех сотрудников, чье имя начинается с заглавной буквы S:

+ -------- + ------------------ + ------------ + -------- + --------- +
| emp_id | emp_name | найм_дата | зарплата | dept_id |
+ -------- + ------------------ + ------------ + -------- + --------- +
| 3 | Сара Коннор | 2005-10-18 | 8000 | 5 |
+ -------- + ------------------ + ------------ + -------- + --------- +
 

Примечание: Если вы хотите, чтобы столбец всегда обрабатывался с учетом регистра, объявите его с учетом регистра или двоичной сортировкой, чтобы избежать проблем с производительностью.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *