Оператор 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.
ОБЛАСТЬ ПРИМЕНЕНИЯ:
SQL Server
База данных SQL Azure
Azure Synapse Analytics (хранилище данных SQL)
Parallel Data Warehouse APPLIES TO:
SQL Server
Azure SQL Database
Azure Synapse Analytics (SQL DW)
Parallel Data Warehouse
Определяет, совпадает ли указанная символьная строка с заданным шаблоном. Determines whether a specific character string matches a specified pattern. Шаблон может включать обычные символы и символы-шаблоны. A pattern can include regular characters and wildcard characters. Во время сравнения с шаблоном необходимо, чтобы его обычные символы в точности совпадали с символами, указанными в строке. During pattern matching, regular characters must exactly match the characters specified in the character string. Символы-шаблоны могут совпадать с произвольными элементами символьной строки. However, wildcard characters can be matched with arbitrary fragments of the character string. Использование символов-шаблонов в отличие от использования операторов сравнения строки (= и !=) делает оператор LIKE более гибким. Using wildcard characters makes the LIKE operator more flexible than using the = and != string comparison operators. Если тип данных одного из аргументов не является символьной строкой, компонент Компонент SQL Server Database Engine SQL Server Database Engine , если это возможно, преобразует его в тип данных символьной строки. If any one of the arguments isn’t of character string data type, the Компонент SQL Server Database Engine SQL Server Database Engine converts it to character string data type, if it’s possible.
Синтаксические обозначения в Transact-SQL
Transact-SQL Syntax Conventions
Синтаксис Syntax
Аргументы Arguments
match_expression match_expression
Любое допустимое выражение expression символьного типа данных. Is any valid expression of character data type.
pattern pattern
Конкретная строка символов для поиска в match_expression может содержать следующие допустимые символы-шаблоны. Is the specific string of characters to search for in match_expression, and can include the following valid wildcard characters. Длина значения pattern не может превышать 8000 байт. pattern can be a maximum of 8,000 bytes.
| Символ-шаблон Wildcard character | Описание Description | Пример Example |
|---|---|---|
| % | Любая строка, содержащая ноль или более символов. Any string of zero or more characters. | Инструкция WHERE Название LIKE ‘%компьютер%’ выполняет поиск и выдает все названия книг, содержащие слово «компьютер». WHERE title LIKE ‘%computer%’ finds all book titles with the word ‘computer’ anywhere in the book title. |
| _ (подчеркивание) _ (underscore) | Любой одиночный символ. Any single character. | Инструкция WHERE фамилия_автора LIKE ‘_етров’ выполняет поиск и выдает все имена, состоящие из шести букв и заканчивающиеся сочетанием «етров» (Петров, Ветров и т.п.). WHERE au_fname LIKE ‘_ean’ finds all four-letter first names that end with ean (Dean, Sean, and so on). |
| [ ] [ ] | Любой одиночный символ, содержащийся в диапазоне ([a-f]) или наборе ([abcdef]). Any single character within the specified range ([a-f]) or set ([abcdef]). | Инструкция WHERE Фамилия_автора LIKE ‘[Л-С]омов’ выполняет поиск и выдает все фамилии авторов, заканчивающиеся на «омов» и начинающиеся на любую букву в промежутке от «Л» до «С», например Ломов, Ромов, Сомов и т.п. WHERE au_lname LIKE ‘[C-P]arsen’ finds author last names ending with arsen and starting with any single character between C and P, for example Carsen, Larsen, Karsen, and so on. При выполнении операции поиска в диапазоне символы, включенные в диапазон, могут изменяться в зависимости от правил сортировки параметров сортировки. In range searches, the characters included in the range may vary depending on the sorting rules of the collation. |
| [^] [^] | Любой одиночный символ, не содержащийся в диапазоне ([^a-f]) или наборе ([^abcdef]). Any single character not within the specified range ([^a-f]) or set ([^abcdef]). | Инструкция WHERE Фамилия_автора LIKE ‘ив[^а]%’ выполняет поиск и выдает все фамилии, начинающиеся на "ив", в которых третья буква отличается от "а". WHERE au_lname LIKE ‘de[^l]%’ all author last names starting with de and where the following letter isn’t l. |
escape_character escape_character
Символ, помещаемый перед символом-шаблоном для того, чтобы символ-шаблон рассматривался как обычный символ, а не как шаблон. Is a character put in front of a wildcard character to indicate that the wildcard is interpreted as a regular character and not as a wildcard. Аргумент escape_character является символьным выражением, не имеющим значения по умолчанию и возвращающим результат в виде одного символа. escape_character is a character expression that has no default and must evaluate to only one character.
Типы результата Result Types
Boolean Boolean
Значение результата Result Value
Оператор LIKE возвращает значение TRUE, если аргумент match_expression совпадает с указанным аргументом pattern. LIKE returns TRUE if the match_expression matches the specified pattern.
Remarks Remarks
При использовании оператора LIKE для сравнения строк во внимание принимаются все символы строки-шаблона. When you do string comparisons by using LIKE, all characters in the pattern string are significant. К значимым символам также относятся начальные и конечные пробелы. Significant characters include any leading or trailing spaces. Если операция сравнения в запросе должна вернуть все строки, содержащие строки LIKE ‘абв ‘ (с символом пробела на конце), то строка, содержащая "абв" (без пробела), не будет возвращена. If a comparison in a query is to return all rows with a string LIKE ‘abc ‘ (abc followed by a single space), a row in which the value of that column is abc (abc without a space) isn’t returned. Однако завершающие пробелы в выражении, с которым сравнивается шаблон, не учитываются. However, trailing blanks, in the expression to which the pattern is matched, are ignored. Если операция сравнения в запросе должна вернуть все строки, содержащие строки LIKE ‘абв’ (без знака пробела на конце), то будут возвращены все строки, содержащие «абв», как с завершающими пробелами, так и без них. If a comparison in a query is to return all rows with the string LIKE ‘abc’ (abc without a space), all rows that start with abc and have zero or more trailing blanks are returned.
При сравнении строк с помощью оператора LIKE с использованием шаблона, содержащего тип данных char и varchar, могут возникнуть проблемы из-за методов хранения каждого типа данных. A string comparison using a pattern that contains char and varchar data may not pass a LIKE comparison because of how the data is stored for each data type. В ходе выполнения следующего примера локальная переменная char передается хранимой процедуре, а затем с помощью сравнения с шаблоном выполняется поиск всех сотрудников, чьи фамилии начинаются с указанной последовательности букв. The following example passes a local char variable to a stored procedure and then uses pattern matching to find all employees whose last names start with the specified set of characters.
Выполнение процедуры FindEmployee не дает результатов, так как переменная типа char ( @EmpLName ) всегда имеет длину в 20 символов, до которой дополняется завершающими знаками пробела. In the FindEmployee procedure, no rows are returned because the char variable ( @EmpLName ) contains trailing blanks whenever the name contains fewer than 20 characters. Переменные, содержащиеся в столбце LastName , имеют тип varchar. Поэтому завершающие пробелы в них не дописываются. Because the LastName column is varchar, there are no trailing blanks. Данная процедура завершается неудачей, так как завершающие пробелы учитываются. This procedure fails because the trailing blanks are significant.
Процедура из следующего примера выполняется успешно, так как завершающие пробелы к переменной типа varchar не добавляются. However, the following example succeeds because trailing blanks aren’t added to a varchar variable.
Ниже приводится результирующий набор. Here is the result set.
Сопоставление шаблонов с использованием оператора LIKE Pattern Matching by Using LIKE
Оператор LIKE поддерживает сопоставление шаблонов в ASCII и Юникоде. LIKE supports ASCII pattern matching and Unicode pattern matching. Если все аргументы (match_expression, pattern и escape_character, если он указан) имеют символьный тип ASCII, то применяется шаблон ASCII. When all arguments (match_expression, pattern, and escape_character, if present) are ASCII character data types, ASCII pattern matching is performed. Если какой-либо из аргументов имеет тип данных Юникода, выполняется преобразование всех аргументов в Юникод и применяется шаблон Юникода. If any one of the arguments are of Unicode data type, all arguments are converted to Unicode and Unicode pattern matching is performed. Если вы используете оператор LIKE с типом данных Юникода (nchar или nvarchar), завершающие пробелы учитываются в отличие от других типов данных (не Юникода). When you use Unicode data (nchar or nvarchar data types) with LIKE, trailing blanks are significant; however, for non-Unicode data, trailing blanks aren’t significant. Оператор LIKE, используемый с данными Юникод, поддерживает стандарт ISO. Unicode LIKE is compatible with the ISO standard. Оператор LIKE, используемый с данными ASCII, поддерживает более ранние версии SQL Server SQL Server . ASCII LIKE is compatible with earlier versions of SQL Server SQL Server .
В следующих примерах показаны различия в строках, возвращаемых при сопоставлении шаблонов Юникода и ASCII с использованием оператора LIKE. The following is a series of examples that show the differences in rows returned between ASCII and Unicode LIKE pattern matching.
Операции сравнения с помощью оператора LIKE зависят от параметров сортировки. LIKE comparisons are affected by collation. Дополнительные сведения см. в разделе COLLATE (Transact-SQL). For more information, see COLLATE (Transact-SQL).
Использование символа-шаблона «%» Using the % Wildcard Character
Если в операторе LIKE указать символ ‘5%’, то компонент Компонент Database Engine Database Engine будет искать число «5», за которым следует любая строка с числом символов от нуля и больше. If the LIKE ‘5%’ symbol is specified, the Компонент Database Engine Database Engine searches for the number 5 followed by any string of zero or more characters.
Например, при выполнении следующего примера отображаются все динамические административные представления базы данных AdventureWorks2012 AdventureWorks2012 , так как все они начинаются символами dm . For example, the following query shows all dynamic management views in the AdventureWorks2012 AdventureWorks2012 database, because they all start with the letters dm .
Чтобы отобразить все объекты, не являющиеся динамическими административными представлениями, используется синтаксис NOT LIKE ‘dm%’ . To see all objects that aren’t dynamic management views, use NOT LIKE ‘dm%’ . Например, если всего имеется 32 объекта и оператор LIKE выдает 13 наименований, совпадающих с шаблоном, то оператор NOT LIKE возвращает 19 объектов, не соответствующих указанному в операторе LIKE шаблону. If you have a total of 32 objects and LIKE finds 13 names that match the pattern, NOT LIKE finds the 19 objects that don’t match the LIKE pattern.
По такому шаблону, как LIKE ‘[^d][^m]%’ , не всегда будут возвращаться одни и те же имена. You may not always find the same names with a pattern such as LIKE ‘[^d][^m]%’ . Вместо 19 имен можно найти только 14, так как имена, которые начинаются с буквы d или у которых второй буквой является m , будут исключены из результата, как и имена динамических административных представлений. Instead of 19 names, you may find only 14, with all the names that start with d or have m as the second letter eliminated from the results, and the dynamic management view names. Причиной такой реакции на событие является поэтапный поиск отрицательных символов-шаблонов: за один шаг обрабатывается один символ-шаблон. This behavior is because match strings with negative wildcard characters are evaluated in steps, one wildcard at a time. Процесс поиска совпадений прекращается при возникновении сбоя на любой стадии выполнения. If the match fails at any point in the evaluation, it’s eliminated.
Использование символов-шаблонов в качестве литералов Using Wildcard Characters As Literals
Символы-шаблоны могут быть использованы в качестве литералов. You can use the wildcard pattern matching characters as literal characters. Чтобы использовать символ-шаблон в качестве литерала, его необходимо заключать в скобки. To use a wildcard character as a literal character, enclose the wildcard character in brackets. В следующей таблице представлены несколько примеров применения ключевого слова LIKE вместе с символами-шаблонами [ ]. The following table shows several examples of using the LIKE keyword and the [ ] wildcard characters.
| Символ Symbol | Значение Meaning |
|---|---|
| LIKE ‘5[%]’ LIKE ‘5[%]’ | 5 % 5% |
| LIKE ‘[]n’ LIKE ‘[]n’ | _n _n |
| LIKE ‘[a-cdf]’ LIKE ‘[a-cdf]’ | a, b, c, d или f a, b, c, d, or f |
| LIKE ‘[-acdf]’ LIKE ‘[-acdf]’ | -, a, b, c, d или f -, a, c, d, or f |
| LIKE ‘[ [ ]’ LIKE ‘[ [ ]’ | [ [ |
| LIKE ‘]’ LIKE ‘]’ | ] ] |
| LIKE ‘abc[]d%’ LIKE ‘abc[]d%’ | abc_d и abc_de abc_d and abc_de |
| LIKE ‘abc[def]’ LIKE ‘abc[def]’ | abcd, abce и abcf abcd, abce, and abcf |
Совпадение с шаблоном с помощью предложения ESCAPE Pattern Matching with the ESCAPE Clause
Можно искать символьные строки, в состав которых входит один или более специальных символов-шаблонов. You can search for character strings that include one or more of the special wildcard characters. Например, таблица discounts базы данных customers может содержать значения скидок, включающих знак процента (%). For example, the discounts table in a customers database may store discount values that include a percent sign (%). Чтобы выполнить поиск знака процента в качестве символа-шаблона, необходимо ввести ключевое слово ESCAPE и escape-символ. To search for the percent sign as a character instead of as a wildcard character, the ESCAPE keyword and escape character must be provided. Например, образец базы данных содержит столбец с именем comment, в котором хранится значение «30%». For example, a sample database contains a column named comment that contains the text 30%. Чтобы найти строки, содержащие последовательность символов «30%» в столбце comment, необходимо указать предложение WHERE, например WHERE comment LIKE ‘%30!%%’ ESCAPE ‘!’ . To search for any rows that contain the string 30% anywhere in the comment column, specify a WHERE clause such as WHERE comment LIKE ‘%30!%%’ ESCAPE ‘!’ . Если предложение ESCAPE и escape-символ не указаны, компонент Компонент Database Engine Database Engine вернет все записи, содержащие последовательность символов "30!". If ESCAPE and the escape character aren’t specified, the Компонент Database Engine Database Engine returns any rows with the string 30!.
Если в шаблоне LIKE после escape-символа нет никакого символа, то шаблон является недопустимым и оператор LIKE возвращает значение FALSE. If there is no character after an escape character in the LIKE pattern, the pattern isn’t valid and the LIKE returns FALSE. Если символ после escape-символа не является символом-шаблоном, то escape-символ игнорируется, а следующий символ рассматривается как обычный символ в шаблоне. If the character after an escape character isn’t a wildcard character, the escape character is discarded and the following character is treated as a regular character in the pattern. К этим символам-шаблонам относятся: подчеркивание (), процент (%) и левая квадратная скобка ([), в том случае, если они заключены в квадратные скобки. These characters include the percent sign (%), underscore (), and left bracket ([) wildcard characters when they are enclosed in double brackets ([ ]). Escape-символы могут использоваться в квадратных скобках ([ ]), включая: знак вставки (^), дефис (-) и правую квадратную скобку (]). Escape characters can be used within the double bracket characters ([ ]), including to escape a caret (^), hyphen (-), or right bracket (]).
Символ 0x0000 (char(0)) не определен в параметрах сортировки Windows, и его нельзя включать в LIKE. 0x0000 (char(0)) is an undefined character in Windows collations and can’t be included in LIKE.
Примеры Examples
A. A. Применение оператора LIKE с символом-шаблоном % Using LIKE with the % wildcard character
В следующем примере в таблице 415 выполняется поиск всех телефонных номеров с кодом города PersonPhone . The following example finds all telephone numbers that have area code 415 in the PersonPhone table.
Ниже приводится результирующий набор. Here is the result set.
Ниже приводится результирующий набор. Here is the result set.
Г. D. Использование символов-шаблонов [ ] Using the [ ] wildcard characters
В следующем примере выполняется поиск в таблице Person сотрудников с именем Cheryl или Sheryl . The following example finds employees on the Person table with the first name of Cheryl or Sheryl .
В следующем примере выполняется поиск строк в таблице Person для сотрудников с фамилией Zheng или Zhang . The following example finds the rows for employees in the Person table with last names of Zheng or Zhang .
Примеры: Azure Synapse Analytics (хранилище данных SQL) Azure Synapse Analytics (SQL DW) и Параллельное хранилище данных Parallel Data Warehouse Examples: Azure Synapse Analytics (хранилище данных SQL) Azure Synapse Analytics (SQL DW) and Параллельное хранилище данных Parallel Data Warehouse
Д. E. Применение оператора LIKE с символом-шаблоном % Using LIKE with the % wildcard character
В следующем примере в таблице DimEmployee выполняется поиск всех сотрудников, телефонные номера которых начинаются с 612 . The following example finds all employees in the DimEmployee table with telephone numbers that start with 612 .
Е. F. Применение оператора NOT LIKE с символом-шаблоном % Using NOT LIKE with the % wildcard character
В следующем примере в таблице DimEmployee выполняется поиск всех телефонных номеров, которые не начинаются с 612 . The following example finds all telephone numbers in the DimEmployee table that don’t start with 612 . . .
Ж. G. Применение оператора LIKE с символом-шаблоном _ Using LIKE with the _ wildcard character
В следующем примере в таблице DimEmployee выполняется поиск всех телефонных номеров, начинающихся с 2 и заканчивающихся на 6 . The following example finds all telephone numbers that have an area code starting with 6 and ending in 2 in the DimEmployee table. Подстановочный знак "%" добавлен в конце шаблона поиска, что соответствует любым следующим символам в значениях столбца с телефонными номерами. The % wildcard character is included at the end of the search pattern to match all following characters in the phone column value.






