T-SQL和WHERE LIKE%Parameter%子句


84

我试图编写一条使用WHERE LIKE'%text%'子句的语句,但是当我尝试为文本使用参数时我没有收到结果。例如,这有效:

SELECT Employee WHERE LastName LIKE '%ning%'

这将返回用户Flenning,Manning,Ningle等。但是此语句不会:

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

未找到结果。有什么建议么?提前致谢。

Answers:


158

它应该是:

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

代替:

...
WHERE LastName LIKE '%@LastName%'

1
感谢您提早提出问题。但事实并非如此。无论如何,寻求一个高性能的答案-这有用吗?:)
bonCodigo

1
@bonCodigo我真的不知道,性能和优化不是我的专长。此外,这些功能是特定于供应商的,您的情况取决于Oracle RDBMS如何评估它们,而我不知道Oracle。抱歉。
Mahmoud Gamal

3
这对我不起作用。%必须在addParameter部分中。在这里看到詹姆斯·柯伦答案stackoverflow.com/questions/251276/...
bendecko

2
请参阅我的答案(当前在下方)。通配符符号是SEARCH表达式的一部分,而不是sql查询的一部分。它由USER输入(或者,如果预定义了通配符搜索,则将其附加到用户搜索表达式输入中)。如果您在数据库级通过字符串连接附加它,则会得到不可重用的查询字符串
swe

16

正确的答案是,因为'%'-sign是搜索表达式的一部分,所以它应该是VALUE的一部分,因此无论您@LastName在哪里设置(无论是来自编程语言还是来自TSQL),都应将其设置为'%' + [userinput] + '%'

或者,在您的示例中:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.