当前周为1,并且1-4=-3不存在.
由于这是一个数据查找,并且您还没有记录查找值列表,因此简单的答案是将缺少的值添加到您的列表中.当然,这是一个黑客攻击,但你有一个星期的列表,如果-3,-2,-1和0对你的逻辑很重要,那么它们可能应该在你的查找列表中有一个条目.
如果查找列表有实际的日历日期,而根本不是查找表,那么解析4周前的实际日期,根本就不要使用周数字!
如果您不想添加这些条目,这个问题通常是通过列表的wrapping来解决的,所以如果您的查找索引小于零,您可以将索引值add到列表中的maximum索引.
let currentWeek
= DATEPART(WEEK, GETDATE())
let startWeek
= currentWeek
- 4
if startWeek
< 0 then startWeek
= 52 - startWeek
在SQL中,这大致可以转化为两个独立的标准:
WHERE
(
week BETWEEN DATEPART(WEEK, GETDATE())-4 AND DATEPART(WEEK, GETDATE())
OR week BETWEEN 52 + DATEPART(WEEK, GETDATE())-4 AND 52
)
这是由于OR引用而起作用的.当当前周为2时,第一个标准将匹配第1周和第2周(0和-1将不存在),但第二个标准将匹配52-0(52)和52-1(51).第53周和第54周被硬编码的52排除在外,作为第二个BEWTEEN子句中的上限.
我已经将这些标准括在方括号中,这样您就不会意外地在此基础上错误地编写其他标准.