2011-11-11 11 views
2

@selctDescriptionパラメータの内容を含むレコードを選択したいのですが、@selctDescriptionが空でない場合のみです。TSQLのCASE内でLIKEを使用する

私は動作しません。次のことを、持っている:

(t.[description] LIKE 
    (
    CASE 
    WHEN @selctDescription = '' THEN t.[description] 
    ELSE ('%' @selctDescription '%') 
    END 
) 
) 

誰もが正しい方向に私を指すことができますか?

答えて

4
SELECT * 
FROM Table 
WHERE 
    ((@selctDescription IS NULL OR @selctDescription = '') 
    OR 
    (t.[description] LIKE '%' + @selctDescription +'%')) 
+0

おかげと機能的に同じになるが、私は自分のアプリケーション内のNULL値を使用しないでください。 – CiccioMiami

+0

'@selctDescription IS NULL'を取り除いてください。今日はNULLを使用していなくても、これを考えるのが大変安全です。IsNullOrEmptyはそのようなケースの共通パターンですので、NULLのままにしておくことをお勧めします。 – sll

+1

@CiccioMiami:それはわかりません;-)ちょうどその部分を削除してください – zerkms

2
@selctDescription = '' OR t.[description] LIKE '%' + @selctDescription + '%' 
2

私はあなたのコードと等価だと思う:一方

t.[description] LIKE '%' + @selctDescription + '%' 

ご説明しますが、これが欲しい示唆:

@selctDescription <> '' 
AND t.[description] LIKE '%' + @selctDescription + '%' 
1

あなたの最初の行に基づいており、コメント、あなたは次の選択をする必要があります:

Select * from table 
    where field <> '' 
    and field like '%' + @selctDescription + '%' 

しかし、あなたは正しいテーブルフィールドを入れなければなりませんし、@selctDesciptionは、テキスト(文字、nchar型、varchar型、nvarchar型、...)でなければなりません。あなたは'%' @selctDescription '%'を持って

2

あなたのための思考のカップル...

、あなたはちょうどそれらを連結する文字列の間+を必要としています。あなたのコードはそのまま動作します。

  • '%' + @selctDescription + '%'

また

、それはあなたもCASE文を必要としないことに注意することは便利ですが、パラメータが空白のときのように、あなたはまだどのと一致します、'%%'取得しますすべて。


現時点であなたがLIKE文の両側にテーブルのフィールドを持っているので、これは知っておくと便利です。これは実際にオプティマイザを傷つけるでしょう。私はCASEを使用した場合、私はそれ以上に固執するように誘惑されると思い...

t.[description] LIKE (CASE WHEN @selctDescription = '' THEN '%' ELSE ('%' + @selctDescription + '%') END) 

これはCASE文の結果は、前の実行に、スカラー値として、一度に行うことができる利点がありますクエリ。いつも再計算されるのとは対照的に。


そして、それは言ったが、それはそれから...

t.[description] LIKE ('%' + @selctDescription + '%') 
+0

t。[description] LIKE( '@selctDescription' = '' 'THEN'% 'ELSE('% '+' @selctDescription '+'% ')END)私は '='のような代わりにこの式を使用することは可能ですか? – CiccioMiami

+0

あなたは変数名のまわりで '' 'を使いたくありません。しかし、そうではなく、このパターンを '= '操作に使うこともできます。' 'table.x =(CASE WHEN @variable =' 'THEN' Something Special 'ELSE @variable END)' – MatBailie

関連する問題