我已经创建了一份报告,该报告应该考察教会部长年的洗礼数量。该部将于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())
有谁知道我收到错误的原因? 谢谢!
答案 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)
上使用索引。但是,我怀疑洗礼的数据库是如此之大,以至于查询将花费很长时间。 (如果这是一个问题,那么您的版本可以使用一些简单的修改。)