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

SE APLICA A: síSQL Server síAzure SQL Database síAzure SQL Data Warehouse síAlmacenamiento de datos paralelos APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Determina si una cadena de caracteres específica coincide con un patrón especificado.Determines whether a specific character string matches a specified pattern. Un patrón puede contener caracteres normales y caracteres comodín.A pattern can include regular characters and wildcard characters. Durante la operación de búsqueda de coincidencias de patrón, los caracteres normales deben coincidir exactamente con los caracteres especificados en la cadena de caracteres.During pattern matching, regular characters must exactly match the characters specified in the character string. Sin embargo, los caracteres comodín pueden coincidir con fragmentos arbitrarios de la cadena.However, wildcard characters can be matched with arbitrary fragments of the character string. El uso de caracteres comodín hace que el operador LIKE sea más flexible que los operadores de comparación de cadenas = y !=.Using wildcard characters makes the LIKE operator more flexible than using the = and != string comparison operators. Si alguno de los argumentos no es del tipo de datos de cadena de caracteres, Motor de base de datos de SQL ServerSQL Server Database Engine lo convierte al tipo de datos de cadena de caracteres, si es posible.If any one of the arguments isn't of character string data type, the Motor de base de datos de SQL ServerSQL Server Database Engine converts it to character string data type, if it's possible.

Icono de vínculo a artículo Convenciones de sintaxis de Transact-SQLArticle link icon Transact-SQL Syntax Conventions

SintaxisSyntax

-- 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
Es cualquier expresión válida de tipo de datos de caracteres.Is any valid expression of character data type.

patternpattern
Es la cadena de caracteres específica que se busca en match_expression y puede incluir los siguientes caracteres comodín válidos.Is the specific string of characters to search for in match_expression, and can include the following valid wildcard characters. pattern puede tener 8.000 bytes como máximo.pattern can be a maximum of 8,000 bytes.

Carácter comodínWildcard character DescripciónDescription EjemploExample
% Cualquier cadena de cero o más caracteres.Any string of zero or more characters. WHERE title LIKE '%computer%' busca todos los títulos de libros que contengan la palabra 'computer' en el título.WHERE title LIKE '%computer%' finds all book titles with the word 'computer' anywhere in the book title.
_ (carácter de subrayado)_ (underscore) Cualquier carácter individual.Any single character. WHERE au_fname LIKE ‘_ean’ busca todos los nombres de cuatro letras que terminen en ean (Dean, Sean, etc.)WHERE au_fname LIKE '_ean' finds all four-letter first names that end with ean (Dean, Sean, and so on).
[ ][ ] Cualquier carácter individual del intervalo ([a-f]) o del conjunto ([abcdef]) que se ha especificado.Any single character within the specified range ([a-f]) or set ([abcdef]). WHERE au_lname LIKE ‘[C-P]arsen’ busca apellidos de autores que terminen en arsen y empiecen por cualquier carácter individual entre C y P, como Carsen, Larsen, Karsen, etc.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. En las búsquedas de intervalos, los caracteres incluidos en el intervalo pueden variar, dependiendo de las reglas de ordenación de la intercalación.In range searches, the characters included in the range may vary depending on the sorting rules of the collation.
[^][^] Cualquier carácter individual que no se encuentre en el intervalo ([^a-f]) o el conjunto ([^abcdef]) que se ha especificado.Any single character not within the specified range ([^a-f]) or set ([^abcdef]). WHERE au_lname LIKE ‘de[^l]%’ busca todos los apellidos de autores que empiecen por de y en los que la siguiente letra no sea l.WHERE au_lname LIKE 'de[^l]%' all author last names starting with de and where the following letter isn't l.

escape_characterescape_character
Es un carácter que se coloca delante de un carácter comodín para indicar que el comodín se interpreta como un comodín, sino como un carácter normal.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 es una expresión de caracteres que no tiene valor predeterminado y se debe evaluar como un único carácter.escape_character is a character expression that has no default and must evaluate to only one character.

Tipos de resultadoResult Types

BooleanBoolean

Valor del resultadoResult Value

LIKE devuelve TRUE si match_expression coincide con el valor pattern especificado.LIKE returns TRUE if the match_expression matches the specified pattern.

NotasRemarks

Cuando se realizan comparaciones de cadenas con LIKE, todos los caracteres de la cadena patrón son significativos,When you do string comparisons by using LIKE, all characters in the pattern string are significant. Los caracteres significativos incluyen los espacios iniciales o finales.Significant characters include any leading or trailing spaces. Si una comparación de una consulta debe devolver todas las filas con una cadena LIKE 'abc ' (abc seguido de un espacio), no se devolverán las filas en las que el valor de esa columna sea abc (sin espacio al final).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. Sin embargo, no se tienen en cuenta los espacios en blanco finales de la expresión con la que se compara el patrón.However, trailing blanks, in the expression to which the pattern is matched, are ignored. Si la comparación de una consulta debe devolver todas las filas con la cadena LIKE 'abc' (abc sin espacio), se devolverán todas las filas que empiecen por abc y tengan cero o más espacios al final.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.

Una comparación de cadenas con un patrón que contenga datos de tipo char y varchar puede no pasar una comparación LIKE debido a la forma en que se han almacenado los datos para cada tipo de datos.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. En el siguiente ejemplo se pasa una variable local char a un procedimiento almacenado y luego se usa la coincidencia de patrones para encontrar todos los empleados cuyos apellidos empiecen por un juego de caracteres especificado.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  

En el procedimiento FindEmployee, no se devuelven filas porque la variable char (@EmpLName) contiene espacios al final cuando el nombre tiene 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. Debido a que la columna LastName es de tipo varchar, no hay espacios al final.Because the LastName column is varchar, there are no trailing blanks. Este procedimiento no funciona porque los espacios al final son significativos.This procedure fails because the trailing blanks are significant.

Pero el siguiente ejemplo funciona porque no se agregan espacios al final a una variable 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';  

El conjunto de resultados es el siguiente.Here is the result set.

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

Coincidencias de patrón con LIKEPattern Matching by Using LIKE

LIKE admite operaciones de coincidencia de patrones ASCII y Unicode.LIKE supports ASCII pattern matching and Unicode pattern matching. Cuando todos los argumentos (match_expression, pattern y escape_character, si están presentes) son tipos de datos de caracteres ASCII, se realiza la coincidencia de patrones ASCII.When all arguments (match_expression, pattern, and escape_character, if present) are ASCII character data types, ASCII pattern matching is performed. Si alguno de los argumentos es del tipo de datos Unicode, todos los argumentos se convierten a Unicode y se realiza la coincidencia de patrones de Unicode.If any one of the arguments are of Unicode data type, all arguments are converted to Unicode and Unicode pattern matching is performed. Cuando se usan datos Unicode (tipos de datos nchar o nvarchar) con LIKE, los espacios en blanco al final son significativos; pero para los datos que no son Unicode, no lo son.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. El uso que se hace de LIKE con Unicode es compatible con el estándar ISO.Unicode LIKE is compatible with the ISO standard. El uso que se hace de LIKE con ASCII es compatible con versiones anteriores de SQL ServerSQL Server.ASCII LIKE is compatible with earlier versions of SQL ServerSQL Server.

A continuación se ofrece una serie de ejemplos donde se muestran las diferencias entre las filas devueltas tras la coincidencia de patrones con LIKE para ASCII y 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  

Nota

La intercalación influye en las comparaciones con LIKE.LIKE comparisons are affected by collation. Para obtener más información, vea COLLATE (Transact-SQL).For more information, see COLLATE (Transact-SQL).

Utilizar el carácter comodín %Using the % Wildcard Character

Si se especifica el símbolo LIKE '5%', el Motor de base de datosDatabase Engine busca el número 5 seguido de cualquier cadena de cero o más caracteres.If the LIKE '5%' symbol is specified, the Motor de base de datosDatabase Engine searches for the number 5 followed by any string of zero or more characters.

Por ejemplo, la siguiente consulta muestra todas las vistas de administración dinámica de la base de datos AdventureWorks2012AdventureWorks2012, porque todas empiezan por las 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 ver todos los objetos que no sean vistas de administración dinámica, utilice NOT LIKE 'dm%'.To see all objects that aren't dynamic management views, use NOT LIKE 'dm%'. Si hay un total de 32 objetos y LIKE encuentra 13 nombres que coinciden con el patrón, NOT LIKE encuentra los 19 objetos que no coinciden con el patrón de 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.

Es posible que no siempre se encuentren los mismos nombres con un patrón como LIKE '[^d][^m]%'.You may not always find the same names with a pattern such as LIKE '[^d][^m]%'. En lugar de 19 nombres, puede que encuentre solo 14, quedando eliminados de los resultados todos los nombres que empiecen por d o tengan m como segunda letra, y los nombres de las vistas de administración dinámica.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. Este comportamiento se debe a que las cadenas de comparación con caracteres comodín negativos se evalúan por pasos, un comodín cada vez.This behavior is because match strings with negative wildcard characters are evaluated in steps, one wildcard at a time. Si la coincidencia genera un error en algún momento de la evaluación, se elimina.If the match fails at any point in the evaluation, it's eliminated.

Utilizar caracteres comodín como literalesUsing Wildcard Characters As Literals

Los caracteres comodín que se utilizan en la operación de búsqueda de coincidencias de patrón se pueden utilizar como literales.You can use the wildcard pattern matching characters as literal characters. Para utilizar un carácter comodín como literal, inclúyalo entre corchetes.To use a wildcard character as a literal character, enclose the wildcard character in brackets. La tabla siguiente muestra varios ejemplos del uso de la palabra clave LIKE y los caracteres comodín [ ].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 o fa, b, c, d, or f
LIKE ‘[-acdf]’LIKE '[-acdf]' -, a, c, d o f-, a, c, d, or f
LIKE ‘[ [ ]’LIKE '[ [ ]' [[
LIKE ']'LIKE ']' ]]
LIKE 'abc[]d%'LIKE 'abc[]d%' abc_d y abc_deabc_d and abc_de
LIKE 'abc[def]'LIKE 'abc[def]' abcd, abce y abcfabcd, abce, and abcf

Operación de búsqueda de coincidencias de patrón con la cláusula ESCAPEPattern Matching with the ESCAPE Clause

Se pueden buscar cadenas de caracteres que incluyan uno o más caracteres comodín especiales.You can search for character strings that include one or more of the special wildcard characters. Por ejemplo, la tabla discounts de una base de datos customers puede almacenar valores de descuento que incluyan un signo de porcentaje (%).For example, the discounts table in a customers database may store discount values that include a percent sign (%). Para buscar el signo de porcentaje como carácter en lugar de como carácter comodín, deben suministrarse la palabra clave ESCAPE y el carácter de 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. Supongamos que una base de datos de ejemplo contiene una columna denominada comment que contiene el texto 30%.For example, a sample database contains a column named comment that contains the text 30%. Para buscar filas que contengan la cadena 30% en cualquier parte de la columna de comentarios, especifique una cláusula WHERE como esta: 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 '!'. Si no se especifican ESCAPE y el carácter de escape, el Motor de base de datosDatabase Engine devolverá las filas con la cadena 30.If ESCAPE and the escape character aren't specified, the Motor de base de datosDatabase Engine returns any rows with the string 30.

Si no hay ningún carácter después de un carácter de escape en el patrón de LIKE, el patrón no es válido y LIKE devuelve FALSE.If there is no character after an escape character in the LIKE pattern, the pattern isn't valid and the LIKE returns FALSE. Si el carácter posterior a un carácter de escape no es un carácter comodín, el carácter de escape se descarta y el carácter que sigue al escape se trata como un carácter normal del patrón.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. Estos caracteres afectan a los caracteres comodín del signo de porcentaje (%), carácter de subrayado () y corchete de apertura ([) cuando se encuentran entre corchetes dobles ([ ]).These characters include the percent sign (%), underscore (), and left bracket ([) wildcard characters when they are enclosed in double brackets ([ ]). Los caracteres de escape pueden usarse dentro de corchetes dobles ([ ]), y se pueden aplicar caracteres de escape al símbolo de intercalación (^), guión (-) y corchete de cierre (]).Escape characters can be used within the double bracket characters ([ ]), including to escape a caret (^), hyphen (-), or right bracket (]).

0x0000 (char(0) ) es un carácter no definido en las intercalaciones de Windows y no se puede incluir en LIKE.0x0000 (char(0)) is an undefined character in Windows collations and can't be included in LIKE.

EjemplosExamples

A.A. Utilizar LIKE con el carácter comodín %Using LIKE with the % wildcard character

En el siguiente ejemplo se buscan todos los números de teléfono de la tabla 415 cuyo código de área sea 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  

El conjunto de resultados es el siguiente.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  

El conjunto de resultados es el siguiente.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.D. Utilizar el carácter comodín [ ]Using the [ ] wildcard characters

El ejemplo siguiente busca empleados cuyo nombre sea Cheryl o Sheryl en la tabla Person.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  

En el siguiente ejemplo se buscan las filas con empleados en la tabla Person con el apellido de Zheng o 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  

Ejemplos: Almacenamiento de datos SQL de AzureAzure SQL Data Warehouse y Almacenamiento de datos paralelosParallel Data WarehouseExamples: Almacenamiento de datos SQL de AzureAzure SQL Data Warehouse and Almacenamiento de datos paralelosParallel Data Warehouse

E.E. Utilizar LIKE con el carácter comodín %Using LIKE with the % wildcard character

El siguiente ejemplo busca todos los empleados cuyo número de teléfono empieza por 612 en la tabla DimEmployee.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. Utilizar NOT LIKE con el carácter comodín %Using NOT LIKE with the % wildcard character

El siguiente ejemplo busca todos los números de teléfono de la tabla DimEmployee que no empiecen por 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.G. Usar LIKE con el carácter comodín _Using LIKE with the _ wildcard character

En el siguiente ejemplo se buscan todos los números de teléfono cuyo código de área empieza por 6 y termina por 2 de la tabla DimEmployee.The following example finds all telephone numbers that have an area code starting with 6 and ending in 2 in the DimEmployee table. El carácter comodín % se incluye al final del patrón de búsqueda para que coincida con todos los caracteres siguientes en el valor de la columna phone.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;   

Consulte tambiénSee Also

PATINDEX (Transact-SQL) PATINDEX (Transact-SQL)
Expresiones (Transact-SQL) Expressions (Transact-SQL)
Funciones integradas (Transact-SQL) Built-in Functions (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
WHERE (Transact-SQL)WHERE (Transact-SQL)