SQL如何WHERE CASE WHEN THEN BETWEEN日期

时间:2016-10-24 21:51:23

标签: sql sql-server where between

我正在研究一份试图将这一年分解为4季度的SQL报告。并且要避免必须根据年份运行不同的脚本,我试图让它从一个拉出来。所以我试图做的是在where子句中有一个CASE语句,它将确定一年中的哪个季度告诉它x日期需要在日期y和z之间。这导致了许多语法错误,我无法找到它。如果有可能的话,你们能看看并让我知道吗?

`AND s.actual_arrival BETWEEN 
    CASE
        WHEN MONTH(DATEADD(dd, -1, GETDATE())) < 4 THEN YEAR(DATEADD(dd, -1, GETDATE())) + '-01-01' AND YEAR(DATEADD(dd, -1, GETDATE())) + '03-31 23:59:59'

    WHEN MONTH(DATEADD(dd, -1, GETDATE())) > 3 AND MONTH(DATEADD(dd, -1, GETDATE())) < 7  THEN YEAR(DATEADD(dd, -1, GETDATE())) + '-04-01' AND YEAR(DATEADD(dd, -1, GETDATE())) + '06-30 23:59:59'
    WHEN MONTH(DATEADD(dd, -1, GETDATE())) > 6 AND MONTH(DATEADD(dd, -1, GETDATE())) < 10  THEN YEAR(DATEADD(dd, -1, GETDATE())) + '-07-01' AND YEAR(DATEADD(dd, -1, GETDATE())) + '09-31 23:59:59'
    WHEN MONTH(DATEADD(dd, -1, GETDATE())) > 9 THEN YEAR(DATEADD(dd, -1, GETDATE())) + '-10-01' AND YEAR(DATEADD(dd, -1, GETDATE())) + '12-31 23:59:59'
END`

1 个答案:

答案 0 :(得分:1)

嗯,这样做会不会更简单?

and datepart(quarter, s.actual_arrival) = datepart(quarter, getdate()) and
    year(s.actual_arrival) = year(getdate())
相关问题