94

我试图编写一个使用 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%'

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

4

3 回答 3

178

它应该是:

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

代替:

...
WHERE LastName LIKE '%@LastName%'
于 2013-01-09T14:46:03.747 回答
17

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

或者,在您的示例中:

DECLARE @LastName varchar(max)
SET @LastName = 'ning'
SELECT Employee WHERE LastName LIKE '%' + @LastName + '%'
于 2015-06-02T14:50:31.617 回答
17

你可以试试这个,用过的CONCAT

WHERE LastName LIKE Concat('%',@LastName,'%')
于 2017-07-31T07:19:40.363 回答