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())
我正在编写一份 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())