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

ОБЛАСТЬ ПРИМЕНЕНИЯ ЭТОЙ СТАТЬИ: даSQL Server (начиная с 2008)даБаза данных SQL AzureдаХранилище данных SQL AzureдаParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse 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 is not of character string data type, the Компонент SQL Server Database EngineSQL Server Database Engine converts it to character string data type, if it is possible.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic 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 DescriptionDescription Пример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 is not l.

escape_characterescape_character
Символ, помещаемый перед символом-шаблоном, чтобы символ-шаблон рассматривался как обычный символ, а не как шаблон.Is a character that is put in front of a wildcard character to indicate that the wildcard should be 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 perform string comparisons by using LIKE, all characters in the pattern string are significant. Это касается начальных и конечных пробелов (« »).This includes 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) is not 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.

При использовании шаблона, содержащего тип данных char и varchar для сравнения строк с помощью оператора LIKE, могут возникнуть проблемы, связанные с методом хранения данных.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. Необходимо знать методы хранения каждого типа данных, чтобы избежать некорректного использования оператора LIKE.You should understand the storage for each data type and where a LIKE comparison may fail. В ходе выполнения следующего примера локальная переменная char передается хранимой процедуре, а затем с помощью сравнения с шаблоном выполняется поиск всех сотрудников, чьи фамилии начинаются с указанной последовательности букв.The following example passes a local char variable to a stored procedure and then uses pattern matching to find all of the employees whose last names start with a 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 are not 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 are not 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.

Приведенные ниже примеры поясняют различия между результатами сравнения данных с шаблонами оператора LIKE, представленными в Юникоде и ASCII.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 are not 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 do not 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 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 is 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 are not 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 is not valid and the LIKE returns FALSE. Если символ после escape-символа не является символом-шаблоном, то escape-символ игнорируется, а этот символ рассматривается как обычный символ в шаблоне.If the character after an escape character is not a wildcard character, the escape character is discarded and the character following the escape is treated as a regular character in the pattern. Это относится к таким символам-шаблонам, как подчеркивание (), процент (%) и левая квадратная скобка ([), в том случае, если они заключены в квадратные скобки.This includes the percent sign (%), underscore (), and left bracket ([) wildcard characters when they are enclosed in double brackets ([ ]). Также в квадратных скобках ([ ]) и при использовании escape-символов можно использовать такие символы, как знак вставки (^), дефис (-) и правая квадратная скобка (]).Also, within the double bracket characters ([ ]), escape characters can be used and the caret (^), hyphen (-), and right bracket (]) can be escaped.

Символ 0x0000 (char(0)) не определен в параметрах сортировки Windows, и его нельзя включать в LIKE.0x0000 (char(0)) is an undefined character in Windows collations and cannot 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. Применение оператора NOT LIKE с символом-шаблоном %Using NOT LIKE with the % wildcard character

В следующем примере в таблице PersonPhone выполняется поиск всех телефонных номеров с региональным кодом, отличным от 415.The following example finds all telephone numbers in the PersonPhone table that have area codes other than 415.

-- 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. Применение предложения ESCAPEUsing the ESCAPE clause

В следующем примере предложение ESCAPE и escape-символ используются для поиска символьной строки 10-15% в столбце c1 таблицы mytbl2.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.

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  

Примеры: Хранилище данных SQL AzureAzure SQL Data Warehouse и Параллельное хранилище данныхParallel Data WarehouseExamples: Хранилище данных SQL AzureAzure SQL Data Warehouse 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 do not 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. Обратите внимание, что символ-шаблон % также включен в конец шаблона поиска, так как код города — это первая часть номера телефона и после значения столбца существуют дополнительные символы.Note that the % wildcard character is also included at the end of the search pattern since the area code is the first part of the phone number and additional characters exist after in the column value.

-- Uses AdventureWorks  

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

См. также:See Also

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