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

Posted

技术标签:

【中文标题】将一年中的一周与“溢出”进行比较【英文标题】:Comparing Week of Year with "overflow" 【发布时间】:2021-06-15 16:26:54 【问题描述】:

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

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

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

问题是周 >=47 和

我认为这类似于指南针航向。假设你在 350 度,然后右转 30 度。 350+30 = 20 度方位。

我正在使用 SQL Server Express

【问题讨论】:

这是在日期表中吗? 星期存储为 int,但如果需要我可以更改 您能发布一些示例数据吗?如果你也有一个 year 字段,那将是可以使用的东西 【参考方案1】:

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

【讨论】:

【参考方案2】:

在 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,dateadd (day, @EndDayOfYear, @WeekDate)))

select @StartDayOfYear
, @EndDayOfYear
, @WeekDate as StartWeek
, CAST(DATEADD(wk, 0, DATEADD(DAY, 1-DATEPART(WEEKDAY, @WeekOfStart), DATEDIFF(dd, -1, @WeekOfStart))) AS DATE) as StartDate
, CAST(DATEADD(wk, 1, DATEADD(DAY, 0-DATEPART(WEEKDAY, @WeekOfEnd), DATEDIFF(dd, 0, @WeekOfEnd))) AS DATE) as EndDate

【讨论】:

以上是关于将一年中的一周与“溢出”进行比较的主要内容,如果未能解决你的问题,请参考以下文章

第十一周作业

第十一周作业

2017-2018-2 20179302《网络攻防》第十一周作业

2017-2018-2 20179305《网络攻防技术》 第十一周作业

将一年中的一天和一年中的日期转换为大查询

2017-2018-2 20179204《网络攻防实践》第十一周学习总结 SQL注入攻击与实践