如果我希望第1个月的第1天属于第1周,我该如何编写查询。我的报告需要显示来自SUN-SAT.so的数据, 如果我当前以任何方式运行报告,它应该只显示SUN-Sat上周的数据。 即使10月27日在10月的第5周下降,我也需要在11月1日的第一周中显示10月27日至11月1日的跌幅。 十一周。
这就是我想在11月份的报告中显示日期范围的方法。并且适用相同的逻辑 每个月。
第1周10/27至11/02
第2周11/03至11/09
第3周11/10至11/16
第4周11/17至11/23
第5周11/24至11/30
所以,我不计算到十月的第四周而不是第五周,因为我计算第五周为第一周 十一月。
同样明智的是,JAN的第一周将是12月29日至01/04。我不想算12月的第5周,因为如果 我相信,会有重复。谢谢。我很感激。
答案 0 :(得分:0)
简单来说,整周“属于”特定月份,基于该周的星期六所在的月份。然后,您希望向后工作并计算给定月份,即属于的所有星期的集合那个月。
这将为您提供正向计算:
declare @date date = getdate();
select month(dateadd(day,7+datediff(day,@date,'2000-01-01')%7,@date))
反向计算:
declare @year int = 2013
declare @month int = 11
select
datefromparts(@year,@month,1) as month,
dateadd(day,i*7+datediff(day,datefromparts(@year,@month,1),'2000-01-01')%7-6,datefromparts(@year,@month,1)) week_start,
dateadd(day,i*7+datediff(day,datefromparts(@year,@month,1),'2000-01-01')%7 ,datefromparts(@year,@month,1)) week_end
from (values(1),(2),(3),(4),(5)) wk(i)