Tengo una consulta SQL como a continuación.
Select * from table where name like '%' + search_criteria + '%'
Si search_criteria = 'abc', devolverá datos que contengan xxxabcxxxx
que está bien.
Pero si mi search_criteria = 'abc%', aún devolverá datos que contengan xxxabcxxx
, lo que no debería ser el caso.
¿Cómo manejo esta situación?
MS-SQL; Si desea que un símbolo %
en search_criteria
se trate como un carácter literal en lugar de como un comodín, descárguelo a [%]
;
.... where name like '%' + replace(search_criteria, '%', '[%]') + '%'
La solución más fácil es prescindir por completo de "me gusta":
Select * from table where charindex(search_criteria, name) > 0
Prefiero charindex como. Históricamente, tuvo un mejor performance, pero no estoy seguro si hace mucha diferencia ahora.
Usa una cláusula de escape:
select * from (select '123abc456' AS result from dual union all select '123abc%456' AS result from dual ) WHERE result LIKE '%abc\%%' escape '\'
Resultado
123abc%456
Puede configurar su personaje de escape a lo que desee. En este caso, el pnetworkingeterminado '\'. El '\%' escapado se convierte en un literal, el segundo '%' no se escapa, así que de nuevo, comodín.
Ver Lista de caracteres especiales para la cláusula SQL LIKE
Para escaping de un personaje en sql puedes usar !
:
EJEMPLO – USO DE PERSONAJES DE ESCAPE
Es importante comprender cómo "escaping de los personajes" cuando se combinan los patrones. Estos ejemplos tratan específicamente con personajes que escapan en Oracle.
Digamos que quería search un carácter% o a _ en la condición SQL LIKE. Puedes hacer esto usando un personaje de escape.
Tenga en count que solo puede definir un carácter de escape como un solo carácter (longitud de 1).
Por ejemplo:
SELECT * FROM suppliers WHERE supplier_name LIKE '!%' escape '!';
Este ejemplo de condición SQL LIKE identifica el! personaje como un personaje de escape. Esta statement devolverá todos los proveedores cuyo nombre es%.
Aquí hay otro ejemplo más complicado que usa caracteres de escape en la condición SQL LIKE.
SELECT * FROM suppliers WHERE supplier_name LIKE 'H%!%' escape '!';
Este ejemplo de condición SQL LIKE devuelve todos los proveedores cuyo nombre comienza con H y termina en%. Por ejemplo, devolvería un valor como 'Hola%'.
También puede usar el carácter de escape con el carácter _ en la condición SQL LIKE.
Por ejemplo:
SELECT * FROM suppliers WHERE supplier_name LIKE 'H%!_' escape '!';
Este ejemplo de condición SQL LIKE devuelve todos los proveedores cuyo nombre comienza por H y termina en _. Por ejemplo, devolvería un valor como 'Hello_'.
Referencia: sql / like
Select * from table where name like search_criteria
si espera que el usuario agregue sus propios comodines …
Debe escaping: en muchas bases de datos esto se hace precediéndolo con barra invertida, \%
.
Entonces abc
convierte en abc\%
.
Su lenguaje de progtwigción tendrá una function específica de database para hacer esto por usted. Por ejemplo, PHP tiene mysql_escape_string () para la database MySQL .
Escape del signo de porcentaje \%
para hacerlo parte de su valor de comparación.
Puede ser esta una ayuda 🙂
DECLARE @SearchCriteria VARCHAR(25) SET @SearchCriteria = 'employee' IF CHARINDEX('%', @SearchCriteria) = 0 BEGIN SET @SearchCriteria = '%' + @SearchCriteria + '%' END SELECT * FROM Employee WHERE Name LIKE @SearchCriteria