SQL 如何 WHERE CASE WHEN x THEN BETWEEN 日期

SQL how to WHERE CASE WHEN x THEN BETWEEN dates

我正在编写一份 SQL 报告,该报告试图将一年分为 4 个季度。并且为了避免 运行 根据年份的不同而使用不同的脚本,我试图将它全部从一个脚本中拉出来。所以我试图做的是在 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`

嗯嗯,这样做不是更简单吗?

and datepart(quarter, s.actual_arrival) = datepart(quarter, getdate()) and
    year(s.actual_arrival) = year(getdate())