T-SQLとWHERELIKE%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%'

結果が見つかりません。助言がありますか?前もって感謝します。

回答:


161

そのはず:

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

の代わりに:

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

1
質問に関する以前のヒントに感謝します。しかし、そうではありませんでした。とにかく、高性能の答えを求めて-これは便利ですか?:)
bonCodigo 2013年

1
@bonCodigoよくわかりませんが、パフォーマンスと最適化は私の分野ではありません。さらに、これらの関数はベンダー固有であり、あなたの場合、それはOracle RDBMSがそれらをどのように評価するかに依存し、私はOracleを知りません。ごめんなさい。
Mahmoud Gamal 2013年

3
これは私にはうまくいきませんでした。%はaddParameterセクションにある必要があります。こちらをご覧ジェームズカランの答えはstackoverflow.com/questions/251276/...
bendecko

2
私の答えを参照してください(現在は以下)。ワイルドカード記号はSEARCH式の一部であり、sql-queryの一部ではありません。これはユーザーによって入力されます(または、ワイルドカード検索が事前定義されている場合は、ユーザーの検索式の入力に追加されます)。データベースレベルで文字列の連結を介して追加すると、再利用できないクエリ文字列が得られます
swe

16

正解は、'%'-signは検索式の一部であるため、VALUEの一部である必要があるため、SETする場所@LastName(プログラミング言語からでもTSQLからでも)では、次のように設定する必要があります。'%' + [userinput] + '%'

または、あなたの例では:

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

9

あなたはこれを試すことができます、CONCATを使用しました

WHERE LastName LIKE Concat('%',@LastName,'%')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.