0

SQLで以下のステートメントを書くにはどうすればよいですか。

同様にエラーが発生します。

select * from a
where
a.Title = case when @Title is null or @Title = '' then a.Title else like %@Title% end
4

8 に答える 8

0

これは null 値のみを処理しますが、空の char/varchar 値も処理するように変更できる可能性があります...

SELECT *
FROM   a
WHERE  a.Title = COALESCE(@Title, a.Title)
于 2013-10-16T01:47:05.137 に答える
0

フィルター基準に関するコメントに基づいて、これはあなたが求めているものになるはずです:

select * from a
where @Title is null or @Title = '' or a.Title like %@Title%
于 2013-10-16T01:47:06.830 に答える
0

@Giorgi Nakeuriの回答を使用できますが、明確にするために:
クエリにいくつかのエラーがあります:

  1. likeの%@Title%後に文字リテラルを使用LIKEする必要がある無効な式です。LIKELIKE '%' + @Title + '%'
  2. 最初にCASEステートメントにあるすべてのブランチで同じタイプの結果を使用する必要があります。a.titlelike %@Title%

したがって、正しいクエリは次のようになります。

SELECT *
FROM a
WHERE 
    1 = CASE
            WHEN @Title IS NULL THEN 1
            WHEN @Title = '' THEN 1
            WHEN a.Title LIKE '%' + @Title + '%' THEN 1
            ELSE 0
        END

ただし、次のように簡略化できます。

SELECT *
FROM a
WHERE a.Title LIKE '%' + ISNULL(@Title, '') + '%'
于 2015-07-17T05:40:10.000 に答える
0

そのような演算子 (= など) を混在させることはできません。「like %Title%」という文字列を作成しようとしているようですが、それはできません。Case は単純に何か (a.title) と比較する値を返します。他の何人かが言っているように、2 つのテストの間で OR を使用する必要があります。

于 2013-10-16T04:11:33.493 に答える
0

構文エラーは、有効な構文ではない %LIKE% を使用しているためです。目的の結果を得るには、代わりに、以下のように条件に基づいて 2 つの異なるクエリを実行できます。

if (@Title = null or @Title = '')
select * from a where a.Title = a.Title
else
select * from a where title like @Title
于 2013-10-16T01:56:21.253 に答える
0

出力に関してとLIKEの間に違いがないため、演算子を に変更するだけですa.title = a.titlea.title like a.title

select *
from a
where a.Title like case when @Title is null or @Title = '' then a.Title else %@Title% end
于 2015-06-05T06:25:28.797 に答える
0

これを試して :

select 
* 
from @a a
where
a.Title = case when (@Title is null or @Title = '') then a.Title else @Title end
于 2013-10-16T05:54:29.507 に答える