报告每年更新

时间:2017-06-21 19:32:17

标签: sql sql-server

我已经创建了一份报告,该报告应该考察教会部长年的洗礼数量。该部将于8月1日至7月31日举行。我目前的报告将告诉我洗礼日期大于2016年1月1日的任何人的姓名。但是我需要每年更改那一年才能正确报告。所以我想使用Case语句让它每年都更新,但是我收到一条错误信息:(错误在where子句中,所以我没有包含整个报告)

WHERE (P.organization_id = 1) AND 
((CandidateProcesses_BaptismDate68.datetime_value) between (
case
When datepart(month, getdate()) < 8 then ('8/1/'+ datepart(year, getdate()))
When datepart(month, getdate()) >7 then ('8/1/'+ 
datepart((year,getdate())-1))End) and Getdate())

有谁知道我收到错误的原因? 谢谢!

1 个答案:

答案 0 :(得分:0)

尝试添加字符串和数字时出错。您可以使用datename()而不是datepart()来解决此问题。但是,我认为这是一种更简单的方法:

WHERE (P.organization_id = 1) AND 
       year(dateadd(month, -7, CandidateProcesses_BaptismDate68.datetime_value)) = year(dateadd(month, -7, getdate()))

这减去7个月以获得“部门年”,然后将其与当前日期减去7个月进行比较。也就是说,它减去7个月,然后在日历年进行标准化。

这比您的版本贵一点,因为它无法在CandidateProcesses_BaptismDate68(datetime_value)上使用索引。但是,我怀疑洗礼的数据库是如此之大,以至于查询将花费很长时间。 (如果这是一个问题,那么您的版本可以使用一些简单的修改。)