2013-01-09 25 views
42

WHERE LIKE '%text%'句を使用するステートメントを作成しようとしましたが、テキストのパラメータを使用しようとしたときに結果が表示されません。たとえば、この作品:T-SQLとWHERE LIKE%Parameter%句

SELECT Employee WHERE LastName LIKE '%ning%' 

これは、ユーザーFlenning、マニング、Ningleなどを返します。しかし、この文はないでしょう:

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はの一部であるため、ということであり、あなたの検索式は、あなたのVALUEの一部でなければなりません。だから、いつでもあなたはSET @LastName(あなたは'%' + [userinput] + '%'

に設定する必要があります)TSQLプログラミング言語からやからそれをすることや、あなたの例では:

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

ありがとうありがとうありがとうございました! –

1

あなたは、このいずれかを試して使用CONCAT

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