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 '_%';


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow