web-dev-qa-db-ja.com

where句のSQLサーバーのユースケース

私がやろうとしていることは、クエリに日時値を考慮させるかどうかを決めることなので、ストアドプロシージャでこれを行う必要はありません

if @considerDate =1
    begin
        select * from table 
        where dateCol = @date
    end
else
    begin 
        select * from table
    end

私は何かをしたいのです

select * from table
where   dateCol = ( case 
                    when  @date is not null
                    then @date
            )

単一のクエリで

5
user2085104

ENDキーワードを追加するだけです

SELECT * 
FROM    tableName
WHERE   dateCol =   CASE WHEN @considerDate =1
                         THEN @date 
                         ELSE dateCol 
                    END
15
John Woo

私があなたを正しく理解しているなら、これはうまくいくはずです:

SELECT * 
FROM Table
WHERE dateCol = 
   CASE WHEN @date is not null then @date ELSE dateCol END
4
sgeddes
if @considerDate =0
    begin
        -- set the variable to null so the select will return all rows from table
        set @date = null
    end

SELECT *
FROM table
WHERE dateCol = IsNull(@date, dateCol)

クエリに日付パラメータを含めたくない場合は、値をnullに設定します。クエリでは、nullチェックを使用して、フィルタを適用するかどうかを決定できます。

3
mattyc