7

我想做的是让查询考虑或不考虑日期时间值,所以我不必在存储过程中这样做

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
            )

在单个查询中

4

3 回答 3

18

你只需要添加END关键字

SELECT * 
FROM    tableName
WHERE   dateCol =   CASE WHEN @considerDate =1
                         THEN @date 
                         ELSE dateCol 
                    END
于 2013-02-19T00:30:01.817 回答
5

如果我理解正确,这应该有效:

SELECT * 
FROM Table
WHERE dateCol = 
   CASE WHEN @date is not null then @date ELSE dateCol END
于 2013-02-19T00:29:49.590 回答
3
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 检查来决定是否应用过滤器。

于 2013-10-16T22:28:12.803 回答