Buscar..
Sintaxis
Comodín con%: SELECCIONAR * DE [tabla] DONDE [nombre_columna] Me gusta '% Valor%'
Comodín con _: SELECCIONAR * DE [tabla] DONDE [nombre_columna] como 'V_n%'
Tarjeta comodín con [charlist]: SELECT * FROM [table] DONDE [column_name] Me gusta 'V [abc] n%'
Observaciones
La condición LIKE en la cláusula WHERE se usa para buscar valores de columna que coincidan con el patrón dado. Los patrones se forman usando los siguientes dos caracteres comodín
- % (Símbolo de porcentaje): se utiliza para representar cero o más caracteres
- _ (Subrayado): se utiliza para representar un solo carácter
Coincidir patrón abierto
El %
comodín añadido al principio o al final (o ambos) de una cadena permitirá que coincida con 0 o más de cualquier carácter antes del comienzo o después del final del patrón.
Usar '%' en el medio permitirá que coincidan 0 o más caracteres entre las dos partes del patrón.
Vamos a utilizar esta tabla de empleados:
Carné de identidad | FName | LName | Número de teléfono | ManagerId | DepartmentId | Salario | Fecha de contratación |
---|---|---|---|---|---|---|---|
1 | Juan | Johnson | 2468101214 | 1 | 1 | 400 | 23-03-2005 |
2 | Sophie | Amudsen | 2479100211 | 1 | 1 | 400 | 11-01-2010 |
3 | Ronny | Herrero | 2462544026 | 2 | 1 | 600 | 06-08-2015 |
4 | Jon | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
5 | Hilde | Knag | 2468021911 | 2 | 1 | 800 | 01-01-2000 |
La siguiente declaración coincide con todos los registros que tienen FName que contiene la cadena 'on' de la Tabla de empleados.
SELECT * FROM Employees WHERE FName LIKE '%on%';
Carné de identidad | FName | LName | Número de teléfono | ManagerId | DepartmentId | Salario | Fecha de contratación |
---|---|---|---|---|---|---|---|
3 | R en ny | Herrero | 2462544026 | 2 | 1 | 600 | 06-08-2015 |
4 | J en | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
La siguiente declaración coincide con todos los registros que tienen Número de teléfono que comienza con la cadena '246' de los Empleados.
SELECT * FROM Employees WHERE PhoneNumber LIKE '246%';
Carné de identidad | FName | LName | Número de teléfono | ManagerId | DepartmentId | Salario | Fecha de contratación |
---|---|---|---|---|---|---|---|
1 | Juan | Johnson | 246 8101214 | 1 | 1 | 400 | 23-03-2005 |
3 | Ronny | Herrero | 246 2544026 | 2 | 1 | 600 | 06-08-2015 |
5 | Hilde | Knag | 246 8021911 | 2 | 1 | 800 | 01-01-2000 |
La siguiente declaración coincide con todos los registros cuyo Número de teléfono termina con la cadena '11' de los Empleados.
SELECT * FROM Employees WHERE PhoneNumber LIKE '%11'
Carné de identidad | FName | LName | Número de teléfono | ManagerId | DepartmentId | Salario | Fecha de contratación |
---|---|---|---|---|---|---|---|
2 | Sophie | Amudsen | 24791002 11 | 1 | 1 | 400 | 11-01-2010 |
5 | Hilde | Knag | 24680219 11 | 2 | 1 | 800 | 01-01-2000 |
Todos los registros donde Fname 3er carácter es 'n' de Empleados.
SELECT * FROM Employees WHERE FName LIKE '__n%';
(dos guiones bajos se usan antes de 'n' para omitir los primeros 2 caracteres)
Carné de identidad | FName | LName | Número de teléfono | ManagerId | DepartmentId | Salario | Fecha de contratación |
---|---|---|---|---|---|---|---|
3 | Ronny | Herrero | 2462544026 | 2 | 1 | 600 | 06-08-2015 |
4 | Jon | Sanchez | 2454124602 | 1 | 1 | 400 | 23-03-2005 |
Partido de un solo personaje
Para ampliar las selecciones de una declaración de lenguaje de consulta estructurada (SQL-SELECT), se pueden usar caracteres comodín, el signo de porcentaje (%) y el subrayado (_).
El carácter _
(guión bajo) se puede usar como comodín para cualquier carácter individual en una coincidencia de patrón.
Encuentre todos los empleados cuyo Fname comience con 'j' y termine con 'n' y tenga exactamente 3 caracteres en Fname.
SELECT * FROM Employees WHERE FName LIKE 'j_n'
_
(subrayado) también se puede usar más de una vez como comodín para hacer coincidir patrones.
Por ejemplo, este patrón coincidiría con "jon", "jan", "jen", etc.
Estos nombres no se mostrarán "jn", "john", "jordan", "justin", "jason", "julian", "jillian", "joann" porque en nuestra consulta se usa un guión bajo y se puede omitir exactamente Un carácter, por lo que el resultado debe ser de 3 caracteres Fname.
Por ejemplo, este patrón coincidiría con "LaSt", "LoSt", "HaLt", etc.
SELECT * FROM Employees WHERE FName LIKE '_A_T'
Coincidir por rango o conjunto
Haga coincidir cualquier carácter individual dentro del rango especificado (por ejemplo: [af]
) o establezca (por ejemplo: [abcdef]
).
Este patrón de rango coincidiría con "gary" pero no con "mary":
SELECT * FROM Employees WHERE FName LIKE '[a-g]ary'
Este patrón establecido coincidiría con "mary" pero no con "gary":
SELECT * FROM Employees WHERE Fname LIKE '[lmnop]ary'
El rango o conjunto también se puede negar agregando ^
caret antes del rango o conjunto:
Este patrón de rango no coincidirá con "gary" pero sí coincidirá con "mary":
SELECT * FROM Employees WHERE FName LIKE '[^a-g]ary'
Este patrón establecido no coincidirá con "mary", pero coincidirá con "gary":
SELECT * FROM Employees WHERE Fname LIKE '[^lmnop]ary'
Empareja CUALQUIER versus TODOS
Emparejar cualquiera
Debe coincidir al menos una cadena. En este ejemplo, el tipo de producto debe ser 'electrónica', 'libros' o 'video'.
SELECT *
FROM purchase_table
WHERE product_type LIKE ANY ('electronics', 'books', 'video');
Coincidir todos (debe cumplir todos los requisitos).
En este ejemplo, tanto 'reino unido' como 'londres' y 'carretera del este' (incluidas las variaciones) deben coincidir.
SELECT *
FROM customer_table
WHERE full_address LIKE ALL ('%united kingdom%', '%london%', '%eastern road%');
Selección negativa:
Use ALL para excluir todos los artículos.
Este ejemplo produce todos los resultados donde el tipo de producto no es 'electrónica' y no 'libros' y no 'video'.
SELECT *
FROM customer_table
WHERE product_type NOT LIKE ALL ('electronics', 'books', 'video');
Buscar un rango de personajes
La siguiente declaración coincide con todos los registros que tienen un FName que comienza con una letra de la A a la F en la Tabla de empleados .
SELECT * FROM Employees WHERE FName LIKE '[A-F]%'
Sentencia ESCAPE en la consulta LIKE
Si implementas una búsqueda de texto como consulta LIKE
, normalmente lo haces así:
SELECT *
FROM T_Whatever
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%')
Sin embargo, (aparte del hecho de que no debe usar necesariamente LIKE
cuando puede usar la búsqueda de texto completo), esto crea un problema cuando alguien ingresa texto como "50%" o "a_b".
Entonces (en lugar de cambiar a búsqueda de texto completo), puede resolver ese problema usando la sentencia LIKE
-escape:
SELECT *
FROM T_Whatever
WHERE SomeField LIKE CONCAT('%', @in_SearchText, '%') ESCAPE '\'
Eso significa \
ahora será tratado como carácter de escape. Esto significa que ahora puede simplemente añadir \
a cada carácter en la cadena que busca, y los resultados comenzarán a ser correctos, incluso cuando el usuario ingrese un carácter especial como %
o _
.
p.ej
string stringToSearch = "abc_def 50%";
string newString = "";
foreach(char c in stringToSearch)
newString += @"\" + c;
sqlCmd.Parameters.Add("@in_SearchText", newString);
// instead of sqlCmd.Parameters.Add("@in_SearchText", stringToSearch);
Nota: El algoritmo anterior es solo para fines de demostración. No funcionará en los casos en que 1 grafema consta de varios caracteres (utf-8). por ejemplo, string stringToSearch = "Les Mise\u0301rables";
Tendrás que hacer esto para cada grafema, no para cada personaje. No debe usar el algoritmo anterior si está tratando con idiomas asiáticos / asiáticos / asiáticos del sur. O más bien, si quieres comenzar con el código correcto, debes hacer eso para cada graphemeCluster.
Vea también ReverseString, una entrevista de C #
Caracteres comodín
Los caracteres comodín se utilizan con el operador SQL LIKE. Los comodines SQL se utilizan para buscar datos dentro de una tabla.
Los comodines en SQL son:%, _, [charlist], [^ charlist]
% - Un sustituto para cero o más caracteres
Eg: //selects all customers with a City starting with "Lo"
SELECT * FROM Customers
WHERE City LIKE 'Lo%';
//selects all customers with a City containing the pattern "es"
SELECT * FROM Customers
WHERE City LIKE '%es%';
_ - Un sustituto para un solo personaje.
Eg://selects all customers with a City starting with any character, followed by "erlin"
SELECT * FROM Customers
WHERE City LIKE '_erlin';
[charlist] - Conjuntos y rangos de caracteres para emparejar
Eg://selects all customers with a City starting with "a", "d", or "l"
SELECT * FROM Customers
WHERE City LIKE '[adl]%';
//selects all customers with a City starting with "a", "d", or "l"
SELECT * FROM Customers
WHERE City LIKE '[a-c]%';
[^ charlist] : coincide solo con un carácter NO especificado entre paréntesis
Eg://selects all customers with a City starting with a character that is not "a", "p", or "l"
SELECT * FROM Customers
WHERE City LIKE '[^apl]%';
or
SELECT * FROM Customers
WHERE City NOT LIKE '[apl]%' and city like '_%';