T-SQL y la cláusula WHERE LIKE% Parameter%

84

Estaba tratando de escribir una declaración que usa la cláusula WHERE LIKE '% text%', pero no recibo resultados cuando intento usar un parámetro para el texto. Por ejemplo, esto funciona:

SELECT Employee WHERE LastName LIKE '%ning%'

Esto devolvería a los usuarios Flenning, Manning, Ningle, etc. Pero esta declaración no:

DECLARE @LastName varchar(max)
SET @LastName = 'ning'
SELECT Employee WHERE LastName LIKE '%@LastName%'

No se han encontrado resultados. ¿Alguna sugerencia? Gracias por adelantado.

dp3
fuente

Respuestas:

158

Debería ser:

...
WHERE LastName LIKE '%' + @LastName + '%';

En vez de:

...
WHERE LastName LIKE '%@LastName%'
Mahmoud Gamal
fuente
1
gracias por el consejo anterior sobre la pregunta. Pero no fue así. De todos modos, en la búsqueda de una respuesta de alto rendimiento, ¿es esto útil o no? :)
bonCodigo
1
@bonCodigo No lo sé realmente, el rendimiento y la optimización no son mi área. Además, estas funciones son específicas del proveedor, en su caso, depende de cómo las evalúe el RDBMS de Oracle, y no conozco a Oracle. Lo siento.
Mahmoud Gamal
3
Esto no funcionó para mí. El% debe estar en la sección addParameter. Vea la respuesta de James Curran aquí stackoverflow.com/questions/251276/…
bendecko
2
vea mi respuesta (actualmente a continuación). el símbolo-comodín es PARTE de la expresión SEARCH, no parte de la consulta sql. La ingresa el USUARIO (o, si la búsqueda con comodines está predefinida, se agrega a la entrada de la expresión de búsqueda del usuario). Si lo agrega a través de la concatenación de cadenas en el nivel de la base de datos, obtiene una cadena de consulta no reutilizable
swe
16

La respuesta correcta es que, debido a que el '%'signo-es parte de su expresión de búsqueda, debe ser parte de su VALOR, así que dondequiera que lo establezca @LastName(ya sea desde un lenguaje de programación o desde TSQL) debe configurarlo'%' + [userinput] + '%'

o, en tu ejemplo:

DECLARE @LastName varchar(max)
SET @LastName = 'ning'
SELECT Employee WHERE LastName LIKE '%' + @LastName + '%'
swe
fuente
8

puedes probar este, usado CONCAT

WHERE LastName LIKE Concat('%',@LastName,'%')
Ramgy Borja
fuente