Трафаретный символ sql что это
Примеры, с разными LIKE-операторами с «%» и «_» подстановочными знаками:
Выражение | Описание |
WHERE name LIKE ‘text%’ | Находит любые значения, начинающиеся с «text» |
WHERE name LIKE ‘%text’ | Находит любые значения, заканчивающиеся на «text» |
WHERE name LIKE ‘%text%’ | Находит любые значения, которые имеют «text» в любой позиции |
WHERE name LIKE ‘_text%’ | Находит любые значения, которые имеют «text» во второй позиции |
WHERE name LIKE ‘text_%_%’ | Находит любые значения, начинающиеся с «text» и длиной не менее 3 символов |
WHERE name LIKE ‘text%data’ | Находит любые значения, начинающиеся с «text» и заканчивающиеся на «data» |
Использование символа %
Следующий оператор SQL выбирает всех пользователей с name, начинающимся с «Т»:
Пример:
Следующий оператор SQL выбирает всех пользователей с именем, содержащим шаблон «То»:
Пример:
Использование подстановочного знака
Следующий оператор SQL выбирает всех пользователей с name, начиная с любого символа, за которым следует «о»:
Пример:
Следующий оператор SQL выбирает всех пользователе с name начиная с «Т», за которым следует любой символ, за которым следует «м», за которым следует любой символ, а затем «с»:
Пример:
Использование подстановочного знака [charlist]
Следующий оператор SQL выбирает всех пользователей с name, начиная с «Т», «Р» или «Е»:
Пример:
Следующий оператор SQL выбирает всех пользователей с name, начиная с «Т», «Р» или «Е»:
Пример:
Использование подстановочного знака [! Charlist]
Два следующих оператора SQL выбирают всех пользователей с помощью name NOT, начинающегося с «Т», «Р» или «E»:
Предикат LIKE стр. 1
Предикат LIKE сравнивает строку, указанную в первом выражении, для вычисления значения строки, называемого проверяемым значением, с образцом, который определен во втором выражении для вычисления значения строки. В образце разрешается использовать два трафаретных символа:
|
Найти все корабли, имена классов которых заканчиваются на букву ‘о’
Результатом выполнения запроса будет следующая таблица:
|
Найти все корабли, имена классов которых заканчиваются на букву ‘о’, но не на ‘go’
|
Для проверки значения на соответствие строке «25%» можно воспользоваться таким предикатом:
Истинностное значение предиката LIKE присваивается в соответствии со следующими правилами:
SQL-Урок 5. Символы подстановки и регулярные выражения (LIKE)
Часто, для фильтрации данных, нам нужно будет осуществить выборку не по точному совпадении условия, а по приближенному значению. То есть когда, например, мы ищем товар, название которого соответствует определенному шаблону или содержит определенные символы или слова. Для таких целей в SQL существует оператор LIKE, который ищет приближенные значения. Для конструирования такого шаблона используются метасимволы (специальные символы для поиска части значения), а именно: «знак процента» (%) или звездочка (*), «символ подчеркивания» (_) или «знак вопроса» (?), «квадратные скобки» ([ ]).
1. Метасимвол знак процента (%) или звездочка (*)
Давайте из нашей таблицы, например, отберем записи, относящиеся только к товарам, содержащих в своем названии слово Skis (лыжи). Для этого составим соответствующий шаблон:
SELECT * FROM Sumproduct WHERE Product LIKE ‘*Skis*’
Как видим, СУБД отобрала только те записи, где в колонке Product были товары, содержащие слово Skis. Также отметим, что в данном примере используется метасимвол «звездочка» (*), поскольку СУБД Access не поддерживает «знак процента» (% ) для оператора LIKE.
2. Метасимвол знак подчеркивания (_) или знак (?)
Знак подчеркивания или вопросительный знак применяется для того, чтобы заменить один символ в слове. Давайте в слове Bikes заменим все гласные буквы на «вопросительный знак» (?) и посмотрим на результат:
SELECT * FROM Sumproduct WHERE Product LIKE ‘B?k?s’
Мы использовали метасимвол «вопросительный знак» (?), поскольку СУБД Access не поддерживает «знак подчеркивания» (_) для оператора LIKE.
3. Метасимвол квадратные скобки ([ ])
Метасимвол «квадратные скобки» ([ ]) используется для одновременного указания набора символов, по которым нужно выполнить поиск.
SELECT * FROM Sumproduct WHERE City LIKE ‘[TN]*’
В примере выше, мы отобрали записи, где в поле City названия городов начинаются с буквы T или N. Также, в данном случае, мы можем использовать еще один метасимвол, который выполняет обратное действие. Добавим в наше регулярное выражение восклицательный знак (!), что будет означать «не равно» (для СУБД Access) или знак степени (^) (для других СУБД).
SELECT * FROM Sumproduct WHERE City LIKE ‘[!TN]*’
То есть, последний созданный нами запрос будет читаться как: выбрать все колонки из таблицы Sumproduct и только те записи, где в поле City названия городов не начинаются на буквы T или N. Дополнительно отметим, что набор букв в метасимволе «квадратные скобки» отвечает только за одну позицию в тексте.
Мы можем получить аналогичный результат, если воспользоваться уже известным нам оператором NOT, однако с восклицательным знаком (!) запись будет короче.
LIKE (Transact-SQL)
Синтаксические обозначения в Transact-SQL
Синтаксис
ESCAPE и STRING_ESCAPE сейчас не поддерживаются в Azure Synapse Analytics и Система платформы аналитики (PDW).
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
match_expression
Любое допустимое выражение expression символьного типа данных.
pattern
Конкретная строка символов для поиска в match_expression может содержать следующие допустимые символы-шаблоны. Длина значения pattern не может превышать 8000 байт.
Символ-шаблон | Описание | Пример |
---|---|---|
% | Любая строка, содержащая ноль или более символов. | Инструкция WHERE Название LIKE ‘%компьютер%’ выполняет поиск и выдает все названия книг, содержащие слово «компьютер». |
_ (подчеркивание) | Любой одиночный символ. | Инструкция WHERE фамилия_автора LIKE ‘_етров’ выполняет поиск и выдает все имена, состоящие из шести букв и заканчивающиеся сочетанием «етров» (Петров, Ветров и т.п.). |
[ ] | Любой одиночный символ, содержащийся в диапазоне ([a-f]) или наборе ([abcdef]). | Инструкция WHERE Фамилия_автора LIKE ‘[Л-С]омов’ выполняет поиск и выдает все фамилии авторов, заканчивающиеся на «омов» и начинающиеся на любую букву в промежутке от «Л» до «С», например Ломов, Ромов, Сомов и т.п. При выполнении операции поиска в диапазоне символы, включенные в диапазон, могут изменяться в зависимости от правил сортировки параметров сортировки. |
[^] | Любой одиночный символ, не содержащийся в диапазоне ([^a-f]) или наборе ([^abcdef]). | Инструкция WHERE Фамилия_автора LIKE ‘ив[^а]%’ выполняет поиск и выдает все фамилии, начинающиеся на «ив», в которых третья буква отличается от «а». |
escape_character
Символ, помещаемый перед символом-шаблоном для того, чтобы символ-шаблон рассматривался как обычный символ, а не как шаблон. Аргумент escape_character является символьным выражением, не имеющим значения по умолчанию и возвращающим результат в виде одного символа.
Типы результата
Boolean
Значение результата
Оператор LIKE возвращает значение TRUE, если аргумент match_expression совпадает с указанным аргументом pattern.
Комментарии
При использовании оператора LIKE для сравнения строк во внимание принимаются все символы строки-шаблона. К значимым символам также относятся начальные и конечные пробелы. Если операция сравнения в запросе должна вернуть все строки, содержащие строки LIKE ‘абв ‘ (с символом пробела на конце), то строка, содержащая «абв» (без пробела), не будет возвращена. Однако завершающие пробелы в выражении, с которым сравнивается шаблон, не учитываются. Если операция сравнения в запросе должна вернуть все строки, содержащие строки LIKE ‘абв’ (без знака пробела на конце), то будут возвращены все строки, содержащие «абв», как с завершающими пробелами, так и без них.
При сравнении строк с помощью оператора LIKE с использованием шаблона, содержащего тип данных char и varchar, могут возникнуть проблемы из-за методов хранения каждого типа данных. В ходе выполнения следующего примера локальная переменная char передается хранимой процедуре, а затем с помощью сравнения с шаблоном выполняется поиск всех сотрудников, чьи фамилии начинаются с указанной последовательности букв.
Процедура из следующего примера выполняется успешно, так как завершающие пробелы к переменной типа varchar не добавляются.
Совпадение с шаблоном с использованием оператора LIKE
Оператор LIKE поддерживает шаблоны в ASCII и Юникоде. Если все аргументы (match_expression, pattern и escape_character, если он указан) имеют символьный тип ASCII, то применяется шаблон ASCII. В случае, когда какой-либо из аргументов имеет тип данных Юникод, выполняется преобразование всех аргументов в Юникод и применяется шаблон Юникод. Если вы используете оператор LIKE с типом данных Юникода (nchar или nvarchar), завершающие пробелы учитываются в отличие от других типов данных (не Юникода). Работа оператора LIKE с данными в Юникоде совместима со стандартом ISO. Принцип работы оператора LIKE с данными ASCII совместим с более ранними версиями SQL Server.
Приведенные ниже примеры поясняют различия между результатами сравнения данных с шаблонами оператора LIKE, представленными в Юникоде и ASCII.
Операции сравнения с помощью оператора LIKE зависят от параметров сортировки. Дополнительные сведения см. в разделе COLLATE (Transact-SQL).
Использование символа-шаблона «%»
Если в операторе LIKE указать символ ‘5%’, то компонент Компонент Database Engine будет искать число «5», за которым следует любая строка с числом символов от нуля и больше.
Использование символов-шаблонов в качестве литералов
Символы-шаблоны могут быть использованы в качестве литералов. Чтобы использовать символ-шаблон в качестве литерала, его необходимо заключать в скобки. В следующей таблице представлены несколько примеров применения ключевого слова LIKE вместе с символами-шаблонами [ ].
Символ | Значение |
---|---|
LIKE ‘5[%]’ | 5 % |
LIKE ‘[_]n’ | _n |
LIKE ‘[a-cdf]’ | a, b, c, d или f |
LIKE ‘[-acdf]’ | -, a, b, c, d или f |
LIKE ‘[ [ ]’ | [ |
LIKE ‘]’ | ] |
LIKE ‘abc[_]d%’ | abc_d и abc_de |
LIKE ‘abc[def]’ | abcd, abce и abcf |
Совпадение с шаблоном с помощью предложения ESCAPE
Если в шаблоне LIKE после escape-символа нет никакого символа, то шаблон является недопустимым и оператор LIKE возвращает значение FALSE. Если символ после escape-символа не является символом-шаблоном, то escape-символ игнорируется, а следующий символ рассматривается как обычный символ в шаблоне. К этим символам-шаблонам относятся: подчеркивание (_), процент (%) и левая квадратная скобка ([), в том случае, если они заключены в квадратные скобки. Escape-символы могут использоваться в квадратных скобках ([ ]), включая: знак вставки (^), дефис (-) и правую квадратную скобку (]).
Символ 0x0000 (char(0)) не определен в параметрах сортировки Windows, и его нельзя включать в LIKE.
Примеры
A. Применение оператора LIKE с символом-шаблоном %
Б. Применение оператора NOT LIKE с символом-шаблоном %
В. Применение предложения ESCAPE
Г. Использование символов-шаблонов [ ]
Примеры: Azure Synapse Analytics и Система платформы аналитики (PDW)
Д. Применение оператора LIKE с символом-шаблоном %
Е. Применение оператора NOT LIKE с символом-шаблоном %
Ж. Применение оператора LIKE с символом-шаблоном _
like в sql запросе
Оператор SQL LIKE
Оператор Like используется в предложении WHERE для поиска заданного шаблона в столбце.
В сочетании с оператором LIKE используются два подстановочных знака:
Примечание: MS Access использует вопросительный знак (?) вместо знака подчеркивания (_).
Знак процента и подчеркивание также могут быть использованы в комбинации!
LIKE Синтаксис
Совет: Можно также комбинировать любое количество условий с помощью операторов and или or.
Вот несколько примеров, демонстрирующих различные операторы LIKE с подстановочными знаками «%» и «_»:
LIKE Оператор | Описание |
---|---|
WHERE CustomerName LIKE ‘a%’ | Находит любые значения, которые начинаются с «a» |
WHERE CustomerName LIKE ‘%a’ | Находит любые значения, которые заканчиваются «a» |
WHERE CustomerName LIKE ‘%or%’ | Находит любые значения, которые имеют значение «or» в любом положении |
WHERE CustomerName LIKE ‘_r%’ | Находит все значения, которые имеют значение «r» во второй позиции |
WHERE CustomerName LIKE ‘a_%_%’ | Находит любые значения, которые начинаются с «a» и длиной не менее 3 символов |
WHERE ContactName LIKE ‘a%o’ | Находит любые значения, которые начинаются с «a» и заканчиваются на «o» |
Демонстрационная база данных
Ниже приведен выбор из таблицы «Customers» в образце базы данных Northwind:
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 |
Примеры в SQL
Следующая инструкция SQL выбирает всех клиентов с CustomerName, начинающейся с «a»:
Пример
Следующая инструкция SQL выбирает всех клиентов с CustomerName, заканчивающийся на «a»:
Пример
Следующая инструкция SQL выбирает всех клиентов с CustomerName, которые имеют «или» в любой позиции:
Пример
Следующая инструкция SQL выбирает всех клиентов с CustomerName, которые имеют «r» во второй позиции:
Пример
Следующая инструкция SQL выбирает всех клиентов с CustomerName, который начинается с «a» и длиной не менее 3 символов:
Пример
Следующая инструкция SQL выбирает всех клиентов с ContactName, который начинается с «a» и заканчивается на «o»:
Пример
Следующая инструкция SQL выбирает всех клиентов с CustomerName, который не начинается с «a»:
LIKE — данный оператор используется с условием WHERE для поиска значений по образцу.
Синтаксис SQL LIKE
Пример 1
Есть таблица «Persons»:
P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Теперь мы хотим выбрать всех лиц, которые живут в городе, имя которого начинается с буквы «s» из таблицы выше.
Для этого используем такой запрос:
«%» — данный знак является маской. Обозначает любые символы.
P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Пример 2
Теперь мы хотим выбрать всех лиц, которые живут в городе, имя которого заканчивается на букву «s» из таблицы выше.
Для этого используем такой запрос:
P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
Пример 3
Теперь мы хотим выбрать всех лиц, которые живут в городе, имя которого содержит в себе буквы «tav». Не важно, в каком месте будут находиться данные символы, в начале или конце слова.
Для этого используем такой запрос.:
P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
3 | Pettersen | Kari | Storgt 20 | Stavanger |
Пример 4
Теперь мы хотим выбрать всех лиц, которые живут в городе, имя которого не содержит в себе буквы «tav». Используем ключевое слово NOT.
Предикат LIKE сравнивает строку, указанную в первом выражении, для вычисления значения строки, называемого проверяемым значением, с образцом, который определен во втором выражении для вычисления значения строки. В образце разрешается использовать два трафаретных символа:
|
Найти все корабли, имена классов которых заканчиваются на букву ‘о’
Результатом выполнения запроса будет следующая таблица:
|
Найти все корабли, имена классов которых заканчиваются на букву ‘о’, но не на ‘go’
|
Для проверки значения на соответствие строке «25%» можно воспользоваться таким предикатом:
Истинностное значение предиката LIKE присваивается в соответствии со следующими правилами: