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

APLICA-SE A: simSQL Server (a partir do 2008) simBanco de Dados SQL do Azure simSQL Data Warehouse do Azure simParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Determina se uma cadeia de caracteres específica corresponde a um padrão especificado.Determines whether a specific character string matches a specified pattern. Um padrão pode incluir caracteres normais e curingas.A pattern can include regular characters and wildcard characters. Durante a correspondência de padrões, os caracteres normais devem corresponder exatamente aos caracteres especificados na cadeia de caracteres.During pattern matching, regular characters must exactly match the characters specified in the character string. No entanto, os caracteres curinga podem ser correspondidos a fragmentos arbitrários da cadeia de caracteres.However, wildcard characters can be matched with arbitrary fragments of the character string. O uso de caracteres curinga torna o operador LIKE mais flexível que o uso dos operadores de comparação de cadeias de caracteres = e !=.Using wildcard characters makes the LIKE operator more flexible than using the = and != string comparison operators. Se qualquer um dos argumentos não for do tipo de dados de cadeia de caracteres, o Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine o converterá no tipo de dados de cadeia de caracteres, se possível.If any one of the arguments is not of character string data type, the Mecanismo de Banco de Dados do SQL ServerSQL Server Database Engine converts it to character string data type, if it is possible.

Ícone de link do tópico Convenções de sintaxe de Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintaxeSyntax

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

ArgumentosArguments

match_expressionmatch_expression
É qualquer expression válida do tipo de dados de caractere.Is any valid expression of character data type.

patternpattern
É a cadeia de caracteres específica a ser pesquisada em match_expression e pode incluir os caracteres curinga válidos a seguir.Is the specific string of characters to search for in match_expression, and can include the following valid wildcard characters. pattern pode ter um máximo de 8.000 bytes.pattern can be a maximum of 8,000 bytes.

Caractere curingaWildcard character DescriçãoDescription ExemploExample
% Qualquer cadeia de zero ou mais caracteres.Any string of zero or more characters. WHERE title LIKE '%computer%' localiza todos os títulos de livro com a palavra 'computer' em qualquer lugar no título do livro.WHERE title LIKE '%computer%' finds all book titles with the word 'computer' anywhere in the book title.
(sublinhado) (underscore) Qualquer caractere único.Any single character. WHERE au_fname LIKE '_ean' localiza todos os nomes de quatro letras que terminam com ean (Dean, Sean e assim por diante).WHERE au_fname LIKE '_ean' finds all four-letter first names that end with ean (Dean, Sean, and so on).
[ ][ ] Qualquer caractere único no intervalo ([a-f]) ou conjunto ([abcdef]) especificado.Any single character within the specified range ([a-f]) or set ([abcdef]). WHERE au_lname LIKE '[C-P]arsen' localiza os sobrenomes de autores que terminem com arsen e que comecem com qualquer caractere único entre C e P, por exemplo, Carsen, Larsen, Karsen e assim por diante.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. Em pesquisas de intervalo, os caracteres incluídos no intervalo podem variar de acordo com as regras de classificação do agrupamento.In range searches, the characters included in the range may vary depending on the sorting rules of the collation.
[^][^] Qualquer caractere único que não esteja no intervalo (^[a-f]) ou conjunto ([^abcdef]) especificado.Any single character not within the specified range ([^a-f]) or set ([^abcdef]). WHERE au_lname LIKE 'de[^l]%' localiza todos os sobrenomes de autor que comecem com de e a letra seguinte não seja l.WHERE au_lname LIKE 'de[^l]%' all author last names starting with de and where the following letter is not l.

escape_characterescape_character
É um caractere colocado na frente de um caractere curinga para indicar que o curinga deve ser interpretado como um caractere comum, e não como um curinga.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 é uma expressão de caractere que não tem nenhum padrão e deve ser avaliada somente para um caractere.escape_character is a character expression that has no default and must evaluate to only one character.

Tipos de resultadoResult Types

BoolianoBoolean

Valor do resultadoResult Value

LIKE retorna TRUE se a match_expression corresponde ao pattern especificado.LIKE returns TRUE if the match_expression matches the specified pattern.

RemarksRemarks

Ao executar comparações de cadeias de caracteres usando LIKE, todos os caracteres na cadeia padrão são significativos.When you perform string comparisons by using LIKE, all characters in the pattern string are significant. Isso inclui espaços à esquerda ou à direita.This includes leading or trailing spaces. Se uma comparação em uma consulta deve retornar todas as linhas com uma cadeia de caracteres LIKE 'abc ' (abc seguido de um único espaço), não será retornada nenhuma linha na qual o valor daquela coluna seja abc (abc sem espaço).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. Entretanto, os espaços em branco à direita da expressão cujo padrão é correspondido são ignorados.However, trailing blanks, in the expression to which the pattern is matched, are ignored. Se uma comparação em uma consulta deve retornar todas as linhas com a cadeia de caracteres LIKE 'abc' (abc sem espaço), serão retornadas todas as linhas que comecem com abc e que tenham zero ou mais espaços em branco à direita.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.

Uma comparação de cadeia de caracteres que usa um padrão que contém dados char e varchar pode não passar uma comparação LIKE devido à maneira como os dados são armazenados.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. Você deve entender o armazenamento de cada tipo de dados e onde uma comparação LIKE pode falhar.You should understand the storage for each data type and where a LIKE comparison may fail. O exemplo a seguir passa uma variável char local para um procedimento armazenado e usa a correspondência de padrões para localizar todos os funcionários cujos sobrenomes começam com um conjunto de caracteres especificado.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  

No procedimento FindEmployee, nenhuma linha é retornada porque a variável char (@EmpLName) contém espaços em branco à direita sempre que o nome contém menos de 20 caracteres.In the FindEmployee procedure, no rows are returned because the char variable (@EmpLName) contains trailing blanks whenever the name contains fewer than 20 characters. Como a coluna LastName é varchar, não há nenhum espaço em branco à direita.Because the LastName column is varchar, there are no trailing blanks. Este procedimento falha porque os espaços em branco à direita são significativos.This procedure fails because the trailing blanks are significant.

Entretanto, o exemplo a seguir obtém êxito porque não são adicionados espaços em branco à direita a uma variável 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';  

Aqui está o conjunto de resultados.Here is the result set.

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

Correspondência de padrão com o uso de LIKEPattern Matching by Using LIKE

LIKE oferece suporte à correspondência de padrão ASCII e à correspondência de padrão Unicode.LIKE supports ASCII pattern matching and Unicode pattern matching. Quando todos os argumentos (match_expression, pattern e escape_character, se presente) são tipos de dados de caractere ASCII, a correspondência de padrões ASCII é executada.When all arguments (match_expression, pattern, and escape_character, if present) are ASCII character data types, ASCII pattern matching is performed. Se algum dos argumentos for do tipo de dados Unicode, todos os argumentos serão convertidos em Unicode e será executada a correspondência de padrão Unicode.If any one of the arguments are of Unicode data type, all arguments are converted to Unicode and Unicode pattern matching is performed. Ao usar dados Unicode (tipos de dados nchar ou nvarchar) com LIKE, os espaços em branco à direita são significativos; entretanto, para dados não Unicode, os espaços em branco à direita não são significativos.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 Unicode é compatível com o padrão ISO.Unicode LIKE is compatible with the ISO standard. LIKE ASCII é compatível com versões anteriores do SQL ServerSQL Server.ASCII LIKE is compatible with earlier versions of SQL ServerSQL Server.

A seguir é apresentada uma série de exemplos que mostram as diferenças em linhas retornadas entre a correspondência de padrão LIKE ASCII e Unicode.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  

Observação

As comparações de LIKE são afetadas por agrupamento.LIKE comparisons are affected by collation. Para obter mais informações, veja COLLATE (Transact-SQL).For more information, see COLLATE (Transact-SQL).

Usando o caractere curinga %Using the % Wildcard Character

Se o símbolo LIKE '5%' for especificado, o Mecanismo de Banco de DadosDatabase Engine procurará o número 5 seguido por qualquer cadeia de zero ou mais caracteres.If the LIKE '5%' symbol is specified, the Mecanismo de Banco de DadosDatabase Engine searches for the number 5 followed by any string of zero or more characters.

Por exemplo, a consulta a seguir mostra todas as exibições de gerenciamento dinâmico do banco de dados AdventureWorks2012AdventureWorks2012, porque todas começam com as letras 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  

Para consultar todos os objetos que não sejam exibições de gerenciamento dinâmico, use NOT LIKE 'dm%'.To see all objects that are not dynamic management views, use NOT LIKE 'dm%'. Se tiver um total de 32 objetos e LIKE localizar 13 nomes que correspondam ao padrão, NOT LIKE localizará os 19 objetos que não correspondem ao padrão 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.

Talvez você nem sempre localize os mesmos nomes com um padrão do tipo LIKE '[^d][^m]%'.You may not always find the same names with a pattern such as LIKE '[^d][^m]%'. Em vez de 19 nomes, poderá localizar somente 14, com todos os nomes que começam com d ou têm m como a segunda letra eliminada dos resultados, e os nomes de exibição de gerenciamento dinâmico.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. Isto ocorre porque as cadeias de correspondência com caracteres curinga negativos são avaliadas em etapas, um curinga de cada vez.This is because match strings with negative wildcard characters are evaluated in steps, one wildcard at a time. Se a correspondência falhar em qualquer ponto da avaliação, ela será eliminada.If the match fails at any point in the evaluation, it is eliminated.

Usando caracteres curinga como literaisUsing Wildcard Characters As Literals

Você pode usar os caracteres curinga de correspondência de padrão como caracteres literais.You can use the wildcard pattern matching characters as literal characters. Para usar um caractere curinga como um caractere literal, inclua o caractere curinga entre colchetes.To use a wildcard character as a literal character, enclose the wildcard character in brackets. A tabela a seguir mostra vários exemplos de uso da palavra-chave LIKE e dos caracteres curinga [ ].The following table shows several examples of using the LIKE keyword and the [ ] wildcard characters.

SímboloSymbol SignificadoMeaning
LIKE '5[%]'LIKE '5[%]' 5%5%
LIKE '[]n'LIKE '[]n' _n_n
LIKE '[a-cdf]'LIKE '[a-cdf]' a, b, c, d ou fa, b, c, d, or f
LIKE '[-acdf]'LIKE '[-acdf]' -, a, c, d ou f-, a, c, d, or f
LIKE '[ [ ]'LIKE '[ [ ]' [[
LIKE ']'LIKE ']' ]]
LIKE 'abc[]d%'LIKE 'abc[]d%' abc_d e abc_deabc_d and abc_de
LIKE 'abc[def]'LIKE 'abc[def]' abcd, abce e abcfabcd, abce, and abcf

Correspondência de padrão com a cláusula ESCAPEPattern Matching with the ESCAPE Clause

Você pode procurar cadeias de caracteres que incluam um ou mais dos caracteres curinga especiais.You can search for character strings that include one or more of the special wildcard characters. Por exemplo, a tabela discounts em um banco de dados customers pode armazenar valores de desconto que incluem um sinal de por cento (%).For example, the discounts table in a customers database may store discount values that include a percent sign (%). Para procurar o sinal de por cento como um caractere em vez de como um caractere curinga, a palavra-chave ESCAPE e o caractere de escape devem ser fornecidos.To search for the percent sign as a character instead of as a wildcard character, the ESCAPE keyword and escape character must be provided. Por exemplo, um banco de dados de exemplo contém uma coluna denominada comment que contém o texto 30%.For example, a sample database contains a column named comment that contains the text 30%. Para procurar quaisquer linhas que contenham a cadeia de caracteres 30% em qualquer lugar da coluna comment, especifique uma cláusula WHERE, como 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 '!'. Se ESCAPE e o caractere de escape não forem especificados, o Mecanismo de Banco de DadosDatabase Engine retornará quaisquer linhas com a cadeia 30.If ESCAPE and the escape character are not specified, the Mecanismo de Banco de DadosDatabase Engine returns any rows with the string 30.

Se não houver caractere depois de um caractere de escape no padrão de LIKE, o padrão não será válido e LIKE retornará FALSE.If there is no character after an escape character in the LIKE pattern, the pattern is not valid and the LIKE returns FALSE. Se o caractere após um caractere de escape não for um caractere curinga, o caractere de escape será descartado e o caractere após ele será tratado como um caractere normal no padrão.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. Isso inclui os caracteres curinga de sinal de por cento (%), sublinhado () e colchete esquerdo ([) quando eles estiverem incluídos entre colchetes duplos ([ ]).This includes the percent sign (%), underscore (), and left bracket ([) wildcard characters when they are enclosed in double brackets ([ ]). Além disso, dentro dos caracteres de colchete duplo ([ ]), os caracteres de escape podem ser usados e o acento circunflexo (^), o hífen (-) e o colchete direito (]) podem seguir o caractere de 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)) é um caractere indefinido em agrupamentos do Windows e não pode ser incluído em LIKE.0x0000 (char(0)) is an undefined character in Windows collations and cannot be included in LIKE.

ExemplosExamples

A.A. Usando LIKE com o caractere curinga %Using LIKE with the % wildcard character

O exemplo a seguir localiza todos os números de telefone com o código de área 415 na tabela 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  

Aqui está o conjunto de resultados.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.B. Usando NOT LIKE com o caractere curinga %Using NOT LIKE with the % wildcard character

O exemplo a seguir localiza todos os números de telefone na tabela PersonPhone que têm códigos de área diferentes de 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  

Aqui está o conjunto de resultados.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.C. Usando a cláusula ESCAPEUsing the ESCAPE clause

O exemplo a seguir usa a cláusula ESCAPE e o caractere de escape para localizar a cadeia de caracteres exata 10-15% na coluna c1 da tabela 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.D. Usando os caracteres curinga [ ]Using the [ ] wildcard characters

O exemplo a seguir localiza funcionários na tabela Person com o nome Cheryl ou 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  

O exemplo a seguir localiza as linhas de funcionários na tabela Person com os sobrenomes Zheng ou 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  

Exemplos: Azure SQL Data WarehouseAzure SQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

E.E. Usando LIKE com o caractere curinga %Using LIKE with the % wildcard character

O exemplo a seguir localiza todos os funcionários na tabela DimEmployee com números de telefone que começam com 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.F. Usando NOT LIKE com o caractere curinga %Using NOT LIKE with the % wildcard character

O exemplo a seguir localiza todos os números de telefone na tabela DimEmployee que não começam com 612.The following example finds all telephone numbers in the DimEmployee table that do not start with 612. para obter informações sobre a ferramenta de configuração e recursos adicionais..

-- Uses AdventureWorks  

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

G.G. Usando LIKE com o caractere curinga Using LIKE with the wildcard character

O exemplo a seguir localiza todos os números de telefone que têm um código de área que começa com 6 e termina em 2 na tabela DimEmployee.The following example finds all telephone numbers that have an area code starting with 6 and ending in 2 in the DimEmployee table. Observe que o caractere curinga % também é incluído no final do padrão de pesquisa, já que o código de área é a primeira parte do número de telefone e há caracteres adicionais após o valor de coluna.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;   

Consulte TambémSee Also

PATINDEX (Transact-SQL) PATINDEX (Transact-SQL)
Expressões (Transact-SQL) Expressions (Transact-SQL)
Funções internas (Transact-SQL) Built-in Functions (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)