El SQL Like es un tipo de operador lógico que se usa para poder determinar si una cadena de caracteres específica coincide con un patrón específico. Se utiliza normalmente en una sentencia Where para buscar un patrón específico de una columna.
Este operador puede ser de utilidad en los casos donde necesitamos realizar un apareamiento de patrones en vez de iguales o no iguales. El SQL Like se utiliza cuando se desea devolver la fila, si una cadena de caracteres específica coincide con un patrón específico. El patrón puede ser una combinación de caracteres regulares al igual que caracteres de comodín (*,%, ¿, etc.).
Para poder devolver una fila, los caracteres normales se deben hacer coincidir exactamente con los caracteres especificados en la cadena de caracteres. Los caracteres comodín pueden combinarse con partes arbitrarias de la cadena de caracteres.
Utilicemos la base de datos del ejemplo AdventureWorks y veamos algunos de los operadores SQL Like diferentes “%” y “_”. Comodines
Uso del carácter comodín % (representa cero, uno o varios caracteres)
La siguiente consulta retorna todos los números de teléfono cuyo código de área “415” en la tabla “PersonPhone”:
1 2 3 4 5 6 7 |
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 |
Nótese que el símbolo “415%” se especifica en la cláusula “Where”. Esto significa que SQL Server buscará el número 415 seguido de cualquier cadena de cero o más caracteres. Aquí está el conjunto de resultados:
El operador no lógico invierte el valor de cualquier expresión booleana. Por lo tanto, si simplemente especificamos No como con el carácter comodín “%” en la sentencia SQL Like, agrega una condición adicional y colóquela en la misma declaración anterior, de tal forma que deberíamos obtener una consulta como esta:
1 2 3 4 5 6 7 |
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 |
En esta ocasión, la consulta devolvió todos los registros de la tabla “PersonPhone” que tienen códigos de área distintos de 415:
Además, supongamos que queremos encontrar todos los registros en los cuales un nombre contiene “ssa” en ellos. Se puede usar la siguiente consulta:
1 2 3 4 5 |
SELECT p.FirstName, p.LastName FROM Person.Person AS p WHERE LastName LIKE '%ssa%' ORDER BY p.LastName; GO |
Tenga en cuenta que al usar ‘%’ antes y después de “ssa”, le estamos indicando a SQL Server que busque todos los registros en los que “Person.Person” tenga caracteres “ssa” y no importa qué otros caracteres estén antes y después de “ssa”:
Usando el carácter comodín “_” (representa un solo carácter)
El carácter de subrayado de SQL Like, por ejemplo, se utiliza cuando queremos verificar un solo carácter que puede ser cualquier cosa y proveer el resto de los personajes para nuestro lado.
Supongamos que si deseamos devolver todos los registros en los que el primer carácter de la tabla “Nombre” puede ser cualquier cosa, pero el resto de ellos debe ser “en”. Utilice la siguiente consulta:
1 2 3 4 5 |
SELECT p.FirstName, p.MiddleName FROM Person.Person p WHERE p.FirstName LIKE '_en'; GO |
Aquí está el conjunto de resultados:
Tome en cuenta que también se debe usar una combinación de caracteres comodín al final del patrón de búsqueda. Por ejemplo, para obtener todos los números de teléfono que tienen un código de área que comienza con el número 6 y termina en 2 en la tabla “PersonPhone”, use la siguiente consulta:
1 2 3 4 |
SELECT pp.PhoneNumber FROM Person.PersonPhone pp WHERE pp.PhoneNumber LIKE '6_2%' GO |
Tome en cuenta que el carácter comodín “%” se utiliza después del carácter de subrayado, ya que el código de área es la primera parte del número de teléfono y existen caracteres adicionales después del valor de la columna:
Usando los corchetes [ ] (cualquier carácter individual dentro del rango especificado [a-t] o en conjunto [abc])
El operador SQL Like con corchetes es utilizado cuando se quiere tener rango. Supongamos que si queremos encontrar todas las filas donde el primer carácter de “Nombre” comienza con [a-f]. Utilice la siguiente consulta:
1 2 3 4 |
SELECT BusinessEntityID, FirstName, LastName FROM Person.Person WHERE FirstName LIKE '[a-f]%'; GO |
Como puede verse, hemos utilizado el rango [a-f]%. Eso significa que se debe devolver el primer carácter de “a” a la “f” y después de eso, todos los caracteres están bien porque usamos “%” después:
Para obtener cualquier carácter individual dentro de un conjunto, utilice el siguiente ejemplo para encontrar a los empleados en la tabla de “Persona” con el nombre de Cheryl o Sheryl:
1 2 3 4 |
SELECT BusinessEntityID, FirstName, LastName FROM Person.Person WHERE FirstName LIKE '[CS]heryl'; GO |
Esta consulta solo retornara a “Cheryl” en este caso, pero habría devuelto a “Sheryl” también si se tuviera algún registro en la base de datos:
A continuación mostramos otro ejemplo cuando actualmente tenemos resultados mixtos:
1 2 3 4 5 |
SELECT LastName, FirstName FROM Person.Person WHERE LastName LIKE 'Zh[ae]ng' ORDER BY LastName ASC, FirstName ASC; GO |
La consulta previa, muestra los registros de los empleados en la tabla “Persona” con los apellidos de Zheng o Zhang:
Usando corchetes [^] (cualquier carácter individual que no esté dentro del rango especificado [a-t] o en conjunto [abc])
Como habrá adivinado, esto es lo contrario al uso anterior del operador SQL Like entre corchetes. Digamos que queremos obtener todos los registros donde el primer carácter de “Nombre” no comienza con [a a la f]:
1 2 3 4 |
SELECT BusinessEntityID, FirstName, LastName FROM Person.Person WHERE FirstName LIKE '[^a-f]%'; GO |
Observe que solo retornó los registros que no comienzan con ningún carácter de la “a” a la “f”:
Con el ejemplo del conjunto, supongamos que queremos obtener todos los registros en los cuales el “Nombre” no comienza con a, d, j. entonces podemos utilizar la siguiente consulta:
1 2 3 4 |
SELECT BusinessEntityID, FirstName, LastName FROM Person.Person WHERE FirstName LIKE '[^adj]%'; GO |
Aquí se muestra el conjunto de resultados:
Usando la sentencia de Escape
Este es un SQL Like similar al que se utiliza para especificar un carácter de escape. La siguiente consulta utiliza la sentencia de escape y el carácter de escape:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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 INTO 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 |
Devuelve la cadena de caracteres exacta de 10-15 % en la columna c1 de la tabla mytbl2:
Espero realmente que este artículo sobre el operador SQL Like haya sido informativo y les agradezco mucho la lectura.