微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将一年中的一周与“溢出”进行比较

如何解决将一年中的一周与“溢出”进行比较

所以我希望能够查看一年中的特定一周,并查看前后 6 周的所有数据。

WHERE t1.weeknum >= week-6 AND t1.weeknum

所以如果周是 20,我想返回 14 到 26 之间的所有内容

问题是周数 >=47 和

我认为这类似于指南针航向。假设您处于 350 度并向右转 30 度。 350+30 = 20 度方位角。

我使用的是 sql Server Express

解决方法

Modulus operator (%) 似乎正是您想要的。由于您使用范围 152 来表示周数,因此在计算时需要将范围移动到 051

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 以将其移动到从零开始的范围:051
  • 对于“from”值,添加 52 以便结果始终为非负值。这假设输入值始终在 152 的范围内。
  • 添加或减去所需的偏移量 (6)。
  • 使用模数计算带有环绕的值。
  • 添加 1 将结果移回以 1 为基础的范围:152
,

在 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 举报,一经查实,本站将立刻删除。