LIKE (Transact-SQL) - SQL Server (2023)

  • Artigo

Aplica-se a:LIKE (Transact-SQL) - SQL Server (1)SQL ServerLIKE (Transact-SQL) - SQL Server (2)Banco de Dados SQL do AzureLIKE (Transact-SQL) - SQL Server (3)Instância Gerenciada de SQL do AzureLIKE (Transact-SQL) - SQL Server (4)Azure Synapse AnalyticsLIKE (Transact-SQL) - SQL Server (5)PDW (Analytics Platform System)LIKE (Transact-SQL) - SQL Server (6)Ponto de extremidade de SQL no Microsoft FabricLIKE (Transact-SQL) - SQL Server (7)Warehouse no Microsoft Fabric

Determina se uma cadeia de caracteres específica corresponde a um padrão especificado. Um padrão pode incluir caracteres normais e curingas. Durante a correspondência de padrões, os caracteres normais devem corresponder exatamente aos caracteres especificados na cadeia de caracteres. No entanto, os caracteres curinga podem ser correspondidos a fragmentos arbitrários da cadeia de caracteres. O uso de caracteres curinga torna o operador LIKEmais flexível que o uso dos operadores de comparação de cadeias de caracteres = e !=. Se qualquer um dos argumentos não for do tipo de dados de cadeia de caracteres, Mecanismo de Banco de Dados do SQL Server o converterá no tipo de dados de cadeia de caracteres, se for possível.

LIKE (Transact-SQL) - SQL Server (8)Convenções de sintaxe de Transact-SQL

Sintaxe

Sintaxe do SQL Server e do Banco de Dados SQL do Azure:

match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]

Sintaxe do Azure Synapse Analytics e do Parallel Data Warehouse:

match_expression [ NOT ] LIKE pattern

ESCAPE e STRING_ESCAPE não têm suporte no Azure Synapse Analytics ou no PDW (Analytics Platform System).

Observação

Para ver a sintaxe do Transact-SQL para o SQL Server 2014 e versões anteriores, confira a Documentação das versões anteriores.

Argumentos

match_expression

Qualquer expression válida do tipo de dados de caractere.

padrão

A cadeia de caracteres específica a ser pesquisada em match_expression e pode incluir os caracteres curinga válidos na tabela a seguir. pattern pode ter um máximo de 8.000 bytes.

Se match_expression for um tipo de dados de precedência maior do que o padrão e o comprimento do padrão for maior que match_expression, você receberá um erro de truncamento durante a conversão implícita do valor de padrão para o tipo match_expression.

Caractere curingaDescriçãoExemplo
%Qualquer cadeia de zero ou mais caracteres.WHERE title LIKE '%computer%' localiza todos os títulos de livro com a palavra computer em qualquer lugar no título do livro.
_ (sublinhado)Qualquer caractere único.WHERE au_fname LIKE '_ean' localiza todos os nomes de quatro letras que terminam com ean (Dean, Sean e assim por diante).
[ ]Qualquer caractere único no intervalo [a-f] ou conjunto [abcdef] especificado.WHERE au_lname LIKE '[C-P]arsen' localiza os sobrenomes do autor que terminam com arsen e começam com qualquer caractere simples entre C e P, por exemplo Carsen, Larsen, Karsen e assim por diante. Em pesquisas de intervalo, os caracteres incluídos no intervalo podem variar de acordo com as regras de classificação da ordenação.
[^]Qualquer caractere único que não esteja no intervalo [^a-f] ou conjunto [^abcdef] especificado.WHERE au_lname LIKE 'de[^l]%' localiza todos os sobrenomes de autor que comecem com de e a letra seguinte não seja l.

escape_character

Um caractere colocado na frente de um caractere curinga para indicar que o curinga é interpretado como um caractere normal, e não como um curinga. escape_character é uma expressão de caractere que não tem nenhum padrão e deve ser avaliada somente para um caractere.

Tipo de resultado

Booliano

Valor do resultado

LIKE retorna TRUE se a match_expression corresponde ao pattern especificado.

Comentários

Ao realizar comparações de cadeias de caracteres usando LIKE, todos os caracteres na cadeia padrão são significativos. Caracteres significativos incluem espaços à esquerda ou à direita. 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 uma linha na qual o valor da coluna seja abc (abc sem espaço). Entretanto, os espaços em branco à direita da expressão cujo padrão é correspondido são ignorados. 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.

Uma comparação de cadeia de caracteres que usa um padrão que contém dados char e varchar pode não aprovar uma comparação LIKE devido à maneira como os dados são armazenados para cada tipo de dados. O exemplo a seguir aprova 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.

-- Uses AdventureWorksCREATE PROCEDURE FindEmployee @EmpLName CHAR(20)ASSELECT @EmpLName = RTRIM(@EmpLName) + '%';SELECT p.FirstName, p.LastName, a.CityFROM Person.Person pINNER JOIN Person.Address a ON p.BusinessEntityID = a.AddressIDWHERE p.LastName LIKE @EmpLName;GOEXEC 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. Como a coluna LastName é varchar, não há nenhum espaço em branco à direita. Este procedimento falha porque os espaços em branco à direita são significativos.

Entretanto, o exemplo a seguir obtém êxito porque não são adicionados espaços em branco à direita a uma variável varchar.

-- Uses AdventureWorks CREATE PROCEDURE FindEmployee @EmpLName VARCHAR(20)ASSELECT @EmpLName = RTRIM(@EmpLName) + '%';SELECT p.FirstName, p.LastName, a.CityFROM Person.Person pINNER JOIN Person.Address a ON p.BusinessEntityID = a.AddressIDWHERE p.LastName LIKE @EmpLName;GOEXEC FindEmployee @EmpLName = 'Barb';GO

Este é o conjunto de resultados.

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

Correspondência de padrão usando LIKE

LIKE oferece suporte à correspondência de padrão ASCII e à correspondência de padrão Unicode. 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. 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. 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. LIKE Unicode é compatível com o padrão ISO. LIKE ASCII é compatível com versões anteriores do SQL 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.

-- ASCII pattern matching with char columnCREATE TABLE t (col1 CHAR(30));INSERT INTO tVALUES ('Robert King');SELECT * FROM tWHERE col1 LIKE '% King'; -- returns 1 row-- Unicode pattern matching with nchar columnCREATE TABLE t (col1 NCHAR(30));INSERT INTO tVALUES ('Robert King');SELECT * FROM tWHERE col1 LIKE '% King'; -- no rows returned-- Unicode pattern matching with nchar column and RTRIMCREATE TABLE t (col1 NCHAR(30));INSERT INTO tVALUES ('Robert King');SELECT * FROM tWHERE RTRIM(col1) LIKE '% King'; -- returns 1 row

Observação

As comparações de LIKE são afetadas por ordenação. Para obter mais informações, confira COLLATE (Transact-SQL).

Usando o caractere curinga %

Se o símbolo LIKE '5%' for especificado, o Mecanismo de Banco de Dados procurará o número 5 seguido por qualquer cadeia de zero ou mais caracteres.

Por exemplo, a consulta a seguir mostra todas as exibições de gerenciamento dinâmico do banco de dados AdventureWorks2022, porque todas começam com as letras dm.

-- Uses AdventureWorks SELECT NameFROM sys.system_viewsWHERE Name LIKE 'dm%';GO

Para consultar todos os objetos que não sejam exibições de gerenciamento dinâmico, 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.

Talvez você nem sempre localize os mesmos nomes com um padrão do tipo 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. Esse comportamento se deve à avaliação em etapas das cadeias de correspondência com caracteres curinga negativos, um curinga de cada vez. Se a correspondência falhar em qualquer ponto da avaliação, ela será eliminada.

Usar caracteres curinga como literais

Você pode usar os caracteres curinga de correspondência de padrão como caracteres literais. Para usar um caractere curinga como um caractere literal, inclua o caractere curinga entre colchetes. A tabela a seguir mostra vários exemplos de uso da palavra-chave LIKE e dos caracteres curinga [ ].

SímboloSignificado
LIKE '5[%]'5%
LIKE '[_]n'_n
LIKE '[a-cdf]'a, b, c, d ou f
LIKE '[-acdf]'-, a, c, d ou f
LIKE '[ [ ]'[
LIKE ']']
LIKE 'abc[_]d%'abc_d e abc_de
LIKE 'abc[def]'abcd, abce, e abcf

Correspondência de padrão com a cláusula ESCAPE

Você pode procurar cadeias de caracteres que incluam um ou mais dos caracteres curinga especiais. Por exemplo, a tabela discounts em um banco de dados customers pode armazenar valores de desconto que incluem um sinal de por cento (%). 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. Por exemplo, um banco de dados de exemplo contém uma coluna denominada comment que contém o texto 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 '!'. Se ESCAPE e o caractere de escape não forem especificados, o Mecanismo de Banco de Dados retornará quaisquer linhas com a cadeia 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. Se o caractere após um caractere de escape não for um caractere curinga, o caractere de escape será descartado e o caractere seguinte será tratado como um caractere normal no padrão. Esses caracteres curinga incluem o sinal de percentual (%), sublinhado (_) e colchete esquerdo ([) quando estão entre colchetes duplos ([ ]). Os caracteres de escape podem ser usados em caracteres de colchete duplo ([ ]), inclusive para escape de acento circunflexo (^), hífen (-) ou colchete direito (]).

0x0000 (char(0)) é um caractere indefinido em ordenações do Windows e não pode ser incluído em LIKE.

Exemplos

a. Usar LIKE com o caractere curinga %

O exemplo a seguir localiza todos os números de telefone com o código de área 415 na tabela PersonPhone.

-- Uses AdventureWorks SELECT p.FirstName, p.LastName, ph.PhoneNumberFROM Person.PersonPhone AS phINNER JOIN Person.Person AS p ON ph.BusinessEntityID = p.BusinessEntityIDWHERE ph.PhoneNumber LIKE '415%'ORDER BY p.LastName;GO

Este é o conjunto de resultados.

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

B. Usar NOT LIKE com o caractere curinga %

O exemplo a seguir localiza todos os números de telefone na tabela PersonPhone que têm códigos de área diferentes de 415.

-- Uses AdventureWorksSELECT p.FirstName, p.LastName, ph.PhoneNumberFROM Person.PersonPhone AS phINNER JOIN Person.Person AS p ON ph.BusinessEntityID = p.BusinessEntityIDWHERE ph.PhoneNumber NOT LIKE '415%' AND p.FirstName = 'Gail'ORDER BY p.LastName;GO

Este é o conjunto de resultados.

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

C. Como usar a cláusula ESCAPE

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.

USE tempdb;GOIF EXISTS ( SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'mytbl2' ) DROP TABLE mytbl2;GOUSE tempdb;GOCREATE TABLE mytbl2 (c1 SYSNAME);GOINSERT mytbl2VALUES ('Discount is 10-15% off'), ('Discount is .10-.15 off');GOSELECT c1FROM mytbl2WHERE c1 LIKE '%10-15!% off%' ESCAPE '!';GO

D. Usar os caracteres curinga [ ]

O exemplo a seguir localiza funcionários na tabela Person com o nome Cheryl ou Sheryl.

-- Uses AdventureWorksSELECT BusinessEntityID, FirstName, LastNameFROM Person.PersonWHERE FirstName LIKE '[CS]heryl';GO

O exemplo a seguir localiza as linhas de funcionários na tabela Person com os sobrenomes Zheng ou Zhang.

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

Exemplos: Azure Synapse Analytics e PDW (Analytics Platform System)

E. Usar LIKE com o caractere curinga %

O exemplo a seguir localiza todos os funcionários na tabela DimEmployee com números de telefone que começam com 612.

-- Uses AdventureWorks SELECT FirstName, LastName, PhoneFROM DimEmployeeWHERE phone LIKE '612%'ORDER BY LastName;

F. Usar NOT LIKE com o caractere curinga %

O exemplo a seguir localiza todos os números de telefone na tabela DimEmployee que não começam com 612.

-- Uses AdventureWorks SELECT FirstName, LastName, PhoneFROM DimEmployeeWHERE phone NOT LIKE '612%'ORDER BY LastName;

G. Usar LIKE com o caractere curinga _

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. O caractere curinga % é incluído no final do padrão de pesquisa para corresponder a todos os caracteres a seguir no valor de coluna do telefone.

-- Uses AdventureWorks SELECT FirstName, LastName, PhoneFROM DimEmployeeWHERE phone LIKE '6_2%'ORDER BY LastName;

Confira também

  • PATINDEX (Transact-SQL)
  • Expressões (Transact-SQL)
  • Quais são as funções do banco de dados SQL?
  • SELECT (Transact-SQL)
  • SELECT (Transact-SQL)
  • WHERE (Transact-SQL)
Top Articles
Latest Posts
Article information

Author: Ms. Lucile Johns

Last Updated: 11/05/2023

Views: 6022

Rating: 4 / 5 (61 voted)

Reviews: 92% of readers found this page helpful

Author information

Name: Ms. Lucile Johns

Birthday: 1999-11-16

Address: Suite 237 56046 Walsh Coves, West Enid, VT 46557

Phone: +59115435987187

Job: Education Supervisor

Hobby: Genealogy, Stone skipping, Skydiving, Nordic skating, Couponing, Coloring, Gardening

Introduction: My name is Ms. Lucile Johns, I am a successful, friendly, friendly, homely, adventurous, handsome, delightful person who loves writing and wants to share my knowledge and understanding with you.