LIKE (Transact-SQL)LIKE (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ: даSQL Server даБаза данных SQL Azure даAzure Synapse Analytics (хранилище данных SQL) даParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel 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 EngineSQL Server Database Engine, если это возможно, преобразует его в тип данных символьной строки.If any one of the arguments isn't of character string data type, the Компонент SQL Server Database EngineSQL Server Database Engine converts it to character string data type, if it's possible.

Значок ссылки на статью Синтаксические обозначения в Transact-SQLArticle link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

-- Syntax for SQL Server and Azure SQL Database  
  
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]  
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
  
match_expression [ NOT ] LIKE pattern  

АргументыArguments

match_expressionmatch_expression
Любое допустимое выражение expression символьного типа данных.Is any valid expression of character data type.

patternpattern
Конкретная строка символов для поиска в 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_characterescape_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

BooleanBoolean

Значение результатаResult Value

Оператор LIKE возвращает значение TRUE, если аргумент match_expression совпадает с указанным аргументом pattern.LIKE returns TRUE if the match_expression matches the specified pattern.

RemarksRemarks

При использовании оператора 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.

-- Uses AdventureWorks  
  
CREATE PROCEDURE FindEmployee @EmpLName char(20)  
AS  
SELECT @EmpLName = RTRIM(@EmpLName) + '%';  
SELECT p.FirstName, p.LastName, a.City  
FROM Person.Person p JOIN Person.Address a ON p.BusinessEntityID = a.AddressID  
WHERE p.LastName LIKE @EmpLName;  
GO  
EXEC FindEmployee @EmpLName = 'Barb';  
GO  

Выполнение процедуры 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.

-- Uses AdventureWorks  
  
CREATE PROCEDURE FindEmployee @EmpLName varchar(20)  
AS  
SELECT @EmpLName = RTRIM(@EmpLName) + '%';  
SELECT p.FirstName, p.LastName, a.City  
FROM Person.Person p JOIN Person.Address a ON p.BusinessEntityID = a.AddressID  
WHERE p.LastName LIKE @EmpLName;  
GO  
EXEC FindEmployee @EmpLName = 'Barb';  

Ниже приводится результирующий набор.Here is the result set.

FirstName      LastName            City
----------     -------------------- --------------- 
Angela         Barbariol            Snohomish
David          Barber               Snohomish
(2 row(s) affected)  

Сопоставление шаблонов с использованием оператора LIKEPattern 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 ServerSQL Server.ASCII LIKE is compatible with earlier versions of SQL ServerSQL Server.

В следующих примерах показаны различия в строках, возвращаемых при сопоставлении шаблонов Юникода и ASCII с использованием оператора LIKE.The following is a series of examples that show the differences in rows returned between ASCII and Unicode LIKE pattern matching.

-- ASCII pattern matching with char column  
CREATE TABLE t (col1 char(30));  
INSERT INTO t VALUES ('Robert King');  
SELECT *   
FROM t   
WHERE col1 LIKE '% King';   -- returns 1 row  
  
-- Unicode pattern matching with nchar column  
CREATE TABLE t (col1 nchar(30));  
INSERT INTO t VALUES ('Robert King');  
SELECT *   
FROM t   
WHERE col1 LIKE '% King';   -- no rows returned  
  
-- Unicode pattern matching with nchar column and RTRIM  
CREATE TABLE t (col1 nchar (30));  
INSERT INTO t VALUES ('Robert King');  
SELECT *   
FROM t   
WHERE RTRIM(col1) LIKE '% King';   -- returns 1 row  

Примечание

Операции сравнения с помощью оператора LIKE зависят от параметров сортировки.LIKE comparisons are affected by collation. Дополнительные сведения см. в разделе COLLATE (Transact-SQL).For more information, see COLLATE (Transact-SQL).

Использование символа-шаблона «%»Using the % Wildcard Character

Если в операторе LIKE указать символ '5%', то компонент Компонент Database EngineDatabase Engine будет искать число «5», за которым следует любая строка с числом символов от нуля и больше.If the LIKE '5%' symbol is specified, the Компонент Database EngineDatabase Engine searches for the number 5 followed by any string of zero or more characters.

Например, при выполнении следующего примера отображаются все динамические административные представления базы данных AdventureWorks2012AdventureWorks2012, так как все они начинаются символами dm.For example, the following query shows all dynamic management views in the AdventureWorks2012AdventureWorks2012 database, because they all start with the letters dm.

-- Uses AdventureWorks  
  
SELECT Name  
FROM sys.system_views  
WHERE Name LIKE 'dm%';  
GO  

Чтобы отобразить все объекты, не являющиеся динамическими административными представлениями, используется синтаксис 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 или fa, 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_deabc_d and abc_de
LIKE 'abc[def]'LIKE 'abc[def]' abcd, abce и abcfabcd, abce, and abcf

Совпадение с шаблоном с помощью предложения ESCAPEPattern 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 EngineDatabase Engine вернет все записи, содержащие последовательность символов "30!".If ESCAPE and the escape character aren't specified, the Компонент Database EngineDatabase 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.

-- Uses AdventureWorks  
  
SELECT p.FirstName, p.LastName, ph.PhoneNumber  
FROM Person.PersonPhone AS ph  
INNER JOIN Person.Person AS p  
ON ph.BusinessEntityID = p.BusinessEntityID  
WHERE ph.PhoneNumber LIKE '415%'  
ORDER by p.LastName;  
GO  

Ниже приводится результирующий набор.Here is the result set.

FirstName             LastName             Phone
-----------------     -------------------  ------------
Ruben                 Alonso               415-555-124  
Shelby                Cook                 415-555-0121  
Karen                 Hu                   415-555-0114  
John                  Long                 415-555-0147  
David                 Long                 415-555-0123  
Gilbert               Ma                   415-555-0138  
Meredith              Moreno               415-555-0131  
Alexandra             Nelson               415-555-0174  
Taylor                Patterson            415-555-0170  
Gabrielle              Russell             415-555-0197  
Dalton                 Simmons             415-555-0115  
(11 row(s) affected)  
``` 

### B. Using NOT LIKE with the % wildcard character  
The following example finds all telephone numbers in the `PersonPhone` table that have area codes other than `415`.  
 
```sql  
-- Uses AdventureWorks  
 
SELECT p.FirstName, p.LastName, ph.PhoneNumber  
FROM Person.PersonPhone AS ph  
INNER JOIN Person.Person AS p  
ON ph.BusinessEntityID = p.BusinessEntityID  
WHERE ph.PhoneNumber NOT LIKE '415%' AND p.FirstName = 'Gail'  
ORDER BY p.LastName;  
GO  

Ниже приводится результирующий набор.Here is the result set.

FirstName              LastName            Phone
---------------------- -------------------- -------------------
Gail                  Alexander            1 (11) 500 555-0120  
Gail                  Butler               1 (11) 500 555-0191  
Gail                  Erickson             834-555-0132  
Gail                  Erickson             849-555-0139  
Gail                  Griffin              450-555-0171  
Gail                  Moore                155-555-0169  
Gail                  Russell              334-555-0170  
Gail                  Westover             305-555-0100  
(8 row(s) affected)  
```  

### C. Using the ESCAPE clause  
The following example uses the `ESCAPE` clause and the escape character to find the exact character string `10-15%` in column `c1` of the `mytbl2` table.  
 
```sql
USE tempdb;  
GO  
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES  
     WHERE TABLE_NAME = 'mytbl2')  
  DROP TABLE mytbl2;  
GO  
USE tempdb;  
GO  
CREATE TABLE mytbl2  
(  
c1 sysname  
);  
GO  
INSERT mytbl2 VALUES ('Discount is 10-15% off'), ('Discount is .10-.15 off');  
GO  
SELECT c1   
FROM mytbl2  
WHERE c1 LIKE '%10-15!% off%' ESCAPE '!';  
GO  

Г.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.

-- Uses AdventureWorks  
  
SELECT BusinessEntityID, FirstName, LastName   
FROM Person.Person   
WHERE FirstName LIKE '[CS]heryl';  
GO  

В следующем примере выполняется поиск строк в таблице Person для сотрудников с фамилией Zheng или Zhang.The following example finds the rows for employees in the Person table with last names of Zheng or Zhang.

-- Uses AdventureWorks  
  
SELECT LastName, FirstName  
FROM Person.Person  
WHERE LastName LIKE 'Zh[ae]ng'  
ORDER BY LastName ASC, FirstName ASC;  
GO  

Примеры: Azure Synapse Analytics (хранилище данных SQL)Azure Synapse Analytics (SQL DW) и Параллельное хранилище данныхParallel Data WarehouseExamples: 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.

-- Uses AdventureWorks  
  
SELECT FirstName, LastName, Phone  
FROM DimEmployee  
WHERE phone LIKE '612%'  
ORDER by LastName;  

Е.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. ..

-- Uses AdventureWorks  
  
SELECT FirstName, LastName, Phone  
FROM DimEmployee  
WHERE phone NOT LIKE '612%'  
ORDER by LastName;  

Ж.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.

-- Uses AdventureWorks  
  
SELECT FirstName, LastName, Phone  
FROM DimEmployee  
WHERE phone LIKE '6_2%'  
ORDER by LastName;   

См. также:See Also

PATINDEX (Transact-SQL) PATINDEX (Transact-SQL)
Выражения (Transact-SQL) Expressions (Transact-SQL)
Встроенные функции (Transact-SQL) Built-in Functions (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)