如何解决将一年中的一周与“溢出”进行比较
所以我希望能够查看一年中的特定一周,并查看前后 6 周的所有数据。
WHERE t1.weeknum >= week-6 AND t1.weeknum
所以如果周是 20,我想返回 14 到 26 之间的所有内容。
问题是周数 >=47 和
我认为这类似于指南针航向。假设您处于 350 度并向右转 30 度。 350+30 = 20 度方位角。
我使用的是 sql Server Express
解决方法
Modulus operator (%) 似乎正是您想要的。由于您使用范围 1
到 52
来表示周数,因此在计算时需要将范围移动到 0
到 51
:
select WeekNumber,( WeekNumber - 1 + 52 - 6 ) % 52 + 1 as WeekFrom,( WeekNumber - 1 + 6 ) % 52 + 1 as WeekTo
from ( values ( 1 ),( 4 ),( 6 ),( 20 ),( 50 ),( 52 ) ) as Samples( WeekNumber );
说明:
- 以
WeekNumber
开头。 - 减去
1
以将其移动到从零开始的范围:0
到51
。 - 对于“from”值,添加
52
以便结果始终为非负值。这假设输入值始终在1
到52
的范围内。 - 添加或减去所需的偏移量 (
6
)。 - 使用模数计算带有环绕的值。
- 添加
1
将结果移回以 1 为基础的范围:1
到52
。
在 WHERE 子句中使用 StartDate 和 EndDate。如果这是您需要的,请标记为答案。
declare @StartDayOfYear int,@EndDayOfYear int,@WeekNo int,@YearNo int,@WeekDate date,@YearText varchar(4),@Start int,@WeekOfStart date,@WeekOfEnd date
set @WeekNo = 2
set @YearNo = year(getdate())
set @YearText = @YearNo
set @WeekDate = (select dateadd(day,1 - datepart(dw,@YearText + '-01-01') + (@WeekNo-1) * 7,@YearText + '-01-01'))
set @Start = (select datepart(dayofyear,@WeekDate))
set @StartDayOfYear = (select @Start - 42)
set @EndDayOfYear = (select @Start + 42)
set @WeekOfStart = (select Convert (date,dateadd (day,@StartDayOfYear,@WeekDate)))
set @WeekOfEnd = (select Convert (date,@EndDayOfYear,@WeekDate)))
select @StartDayOfYear,@WeekDate as StartWeek,CAST(DATEADD(wk,DATEADD(DAY,1-DATEPART(WEEKDAY,@WeekOfStart),DATEDIFF(dd,-1,@WeekOfStart))) AS DATE) as StartDate,1,0-DATEPART(WEEKDAY,@WeekOfEnd),@WeekOfEnd))) AS DATE) as EndDate
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。