WHERE子句中针对不同日期字段的CASE语句

时间:2019-07-30 04:30:27

标签: sql sql-server tsql

我正在尝试在where子句中包含一个CASE STATEMENT,以根据两种形式的条件显示所有记录。我在下面遇到很多语法错误,想知道我缺少什么?

...
AND 
CASE WHEN (TypeName = 'Category1' or TypeName = 'Category2') THEN 
    Headers.HeaderDate < DATEADD(dd,1,@ReportDate)
ELSE
    Headers.TimeStamp < DATEADD(dd,1,@ReportDate)
END

2 个答案:

答案 0 :(得分:3)

case返回一个值,而不是条件,所以您想要

AND CASE WHEN (TypeName = 'Category1' or TypeName = 'Category2')
  THEN Headers.HeaderDate ELSE Headers.TimeStamp END < DATEADD(dd,1,@ReportDate)

答案 1 :(得分:2)

有一种方法可以不使用case语句

<path>/model.ckpt-XXX

如果and ( (Typename in ('Category1','Category2') and Headers.HeaderDate < DATEADD(dd,1,@ReportDate) or (Typename not in ('Category1','Category2') and Headers.TimeStamp < DATEADD(dd,1,@ReportDate) ) 可以是Typename,则还应牢记。