Consulta SQL 'LIKE' con '%' donde el criterio de búsqueda contiene '%'

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