2013-01-09 75 views
42

我試圖編寫一個使用WHERE LIKE'%text%'子句的語句,但是當我嘗試爲文本使用參數時沒有收到結果。例如,這個工程:T-SQL和WHERE LIKE%參數%子句

SELECT Employee WHERE LastName LIKE '%ning%' 

這將返回用戶Flenning,曼寧,擰了等,但這種說法豈不:

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

沒有找到結果。有什麼建議麼?提前致謝。

回答

93

它應該是:

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

相反的:

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

或者這樣:

... 
WHERE LastName LIKE Concat('%',@LastName,'%') 
+1

感謝對於問題的早期提示。但它不是。無論如何[在追求高性能的答案 - 是否有用或不?](http://stackoverflow.com/a/14243580/1389394):) – bonCodigo

+1

@bonCodigo我真的不知道,性能和優化不是我的地盤。此外,這些功能是特定於供應商的,您的情況取決於Oracle RDBMS如何評估它們,而我不瞭解Oracle。抱歉。 –

+2

這不適合我。 %需要位於addParameter部分。看到詹姆斯柯蘭答案在這裏http://stackoverflow.com/questions/251276/howto-parameters-and-like-statement-sql – bendecko

14

正確的答案是,是的,因爲'%' -sign是一部分你的搜索表達,它應該是你的價值的一部分,所以無論你SET @LastName(無論是從一種編程語言或T-SQL),你應該把它設置爲'%' + [userinput] + '%'

,或者在你的例子:

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

謝謝謝謝謝謝! –

1

你可以試試這個,使用CONCAT

WHERE LastName LIKE Concat('%',@LastName,'%')