在带有case语句的where子句中为null

时间:2017-11-07 07:02:04

标签: sql sql-server-2008

您好我在stackoverflow中搜索我无法得到答案。任何人都可以帮我解决这个问题。

  declare @val varchar(800)
  set @val='current data'
select * from [FeatureCal_GrowthPlan] where snapshot_dt= case when @val='current data' then '2017-01-01'  else  @val end 

以上查询工作正常。但我的要求类似于下面的

declare @val varchar(800)
 set @val='current data'
select * from [FeatureCal_GrowthPlan] where snapshot_dt= case when @val='current data' then is null  else  @val end

我想在@ val ='当前数据'为真时选择所有空值,否则选择变量@val所具有的相应日期。

任何想法?提前致谢

2 个答案:

答案 0 :(得分:1)

你可以使用它。

declare @val varchar(800)
 set @val='current data'
select * from [FeatureCal_GrowthPlan] where 
    ( @val='current data' AND snapshot_dt is null )
    OR 
    ( @val <> 'current data' AND snapshot_dt = @val )

答案 1 :(得分:0)

我通过下面的查询得到了答案,如果我错了,那些家伙会纠正我,这对某人有用。

     declare @val varchar(800)
 set @val='current data'
select * from [FeatureCal_GrowthPlan] where  isnull(snapshot_dt,'1900-01-01')= case when @val='current data' then '1900-01-01'  else   @val end