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

ESTE TEMA SE APLICA A: síSQL Server (a partir de 2008)síAzure SQL DatabasesíAzure SQL Data Warehouse síAlmacenamiento de datos paralelos THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure 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 is not 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 is possible.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQLTopic 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
Se trata de cualquier expresión del tipo de datos de caracteres.Is any valid expression of character data type.

patrónpattern
Es la cadena de caracteres que se va a buscar en específica match_expressiony pueden 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. patrón de puede tener un máximo de 8.000 bytes.pattern can be a maximum of 8,000 bytes.

Carácter comodínWildcard character DescriptionDescription 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 is not l.

escape_characterescape_character
Es un carácter que se coloca delante de un carácter comodín para indicar que el comodín no debe interpretarse como un comodín, sino como un carácter normal.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 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 de resultadoResult Value

LIKE devuelve TRUE si el match_expression coincide con la que se especifica patrón.LIKE returns TRUE if the match_expression matches the specified pattern.

ComentariosRemarks

Cuando se realizan comparaciones de cadenas con LIKE, todos los caracteres de la cadena patrón son significativos,When you perform string comparisons by using LIKE, all characters in the pattern string are significant. incluso los espacios iniciales o finales.This includes 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) is not 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 char y varchar datos pueden no pasar una comparación LIKE debido a cómo se almacenan los 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. Es importante conocer el almacenamiento de cada tipo de datos y dónde puede generar errores una comparación LIKE.You should understand the storage for each data type and where a LIKE comparison may fail. En el ejemplo siguiente se pasa una variable local char variable a un procedimiento almacenado y, a continuación, para encontrar todos los empleados cuyo apellidos empiecen por un conjunto especificado de caracteres de coincidencia de patrón de usos.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  

En el FindEmployee procedimiento, no se devuelven filas porque la char variable (@EmpLName) contiene espacios en blanco finales siempre que el nombre contiene 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. Dado que la LastName columna es varchar, no hay espacios en blanco finales.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.

Sin embargo, en el ejemplo siguiente se realiza correctamente porque los espacios en blanco no se agregan a un varchar variable.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';  

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)  

Operación de búsqueda de coincidencias de patrón con LIKEPattern Matching by Using LIKE

LIKE admite operaciones de búsqueda de coincidencias de patrón ASCII y Unicode.LIKE supports ASCII pattern matching and Unicode pattern matching. Cuando todos los argumentos (match_expression, patrón, y escape_character, si está presente) son tipos de datos de caracteres ASCII, se realiza la búsqueda de coincidencias de patrón 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 operación de búsqueda de coincidencias de patrón 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 utilizan datos Unicode (nchar o nvarchar tipos de datos) con LIKE, los espacios en blanco finales son significativos; sin embargo, para los datos no Unicode, los espacios en blanco no son 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. 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 las 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 operación de búsqueda de coincidencias de patrón 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 are not 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 do not 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. Esto 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 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 is 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 are not 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 is not 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 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. Esto afecta a los caracteres comodín del signo de porcentaje (%), carácter de subrayado () y corchete de apertura ([) cuando se encuentran entre corchetes dobles ([ ]).This includes the percent sign (%), underscore (), and left bracket ([) wildcard characters when they are enclosed in double brackets ([ ]). Asimismo, dentro de corchetes dobles ([ ]) se pueden aplicar caracteres de escape al símbolo de intercalación (^), guión (-) y corchete de cierre (]).Also, within the double bracket characters ([ ]), escape characters can be used and the caret (^), hyphen (-), and right bracket (]) can be escaped.

0 x 0000 (char(0)) es un carácter no definido en las intercalaciones de Windows y no se pueden incluir en LIKE.0x0000 (char(0)) is an undefined character in Windows collations and cannot 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.B. Utilizar NOT LIKE con el carácter comodín %Using NOT LIKE with the % wildcard character

En el siguiente ejemplo se buscan todos los números de teléfono de la tabla PersonPhone cuyos códigos de área no sean 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  

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.C. Utilizar la cláusula ESCAPEUsing the ESCAPE clause

En el ejemplo siguiente se utiliza la cláusula ESCAPE y el carácter de escape para buscar exactamente la cadena de caracteres 10-15% en la columna c1 de la tabla 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. Utilizar el carácter comodín [ ]Using the [ ] wildcard characters

El ejemplo siguiente busca empleados en la Person tabla con el nombre de Cheryl o 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  

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

En el ejemplo siguiente se buscan todos los empleados en la DimEmployee tabla con números de teléfono que comiencen por 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. Utilizar NOT LIKE con el carácter comodín %Using NOT LIKE with the % wildcard character

En el ejemplo siguiente se busca todos los números de teléfono en el DimEmployee tabla que no se inician con 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.G. Utilizar LIKE con el carácter comodín Using LIKE with the wildcard character

En el ejemplo siguiente se busca todos los números de teléfono que tienen un código de área a partir de 6 y finales de 2 en el DimEmployee tabla.The following example finds all telephone numbers that have an area code starting with 6 and ending in 2 in the DimEmployee table. Tenga en cuenta que el carácter comodín % también se incluye al final del patrón de búsqueda, ya que el código de área es la primera parte del número de teléfono y existan los caracteres adicionales después del valor de columna.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;   

H.H. Utilizar el carácter comodín [ ]Using the [ ] wildcard characters

En el ejemplo siguiente se buscan DimEmployee filas con el nombre de Rob o Bob.The following example finds DimEmployee rows with the first name of Rob or Bob.

-- Uses AdventureWorks  

SELECT FirstName, LastName, Phone  
FROM DimEmployee  
WHERE FirstName LIKE '[RB]ob'  
ORDER by LastName;  

Vea tambiénSee Also

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