簡體   English   中英

如果我希望將每月的1號降為T-SQL的1號周,該如何編寫查詢

[英]How do I write query if I want 1st day of the month falls in 1st week in T-SQL

如果我希望每月的第一天屬於第一周,該如何寫查詢。 我的報告需要顯示SUN-SAT.so的數據,所以無論如何我要在當前周運行該報告,它應該只顯示SUN-Sat的前一周的數據。 即使10月27日是10/27,還是11月1日是10 / 27-11 / 02,因為11月1日是11月1日。

這就是我要在報告中顯示11月份的日期范圍的方式。 每個月都有相同的邏輯。

第1周10/27至11/02

第2周11/03至11/09

第三周11/10至11/16

第4周11/17至11/23

第5周11/24至11/30

因此,我沒有算到10月的第4周,而不是5月的第5周,因為我將第5周算作11月的第1周。

同樣,JAN的第一周將是12/29到01/04。 我不想算12月的第5周,因為如果算在內,將會重復。

謝謝。 我很感激。

簡單來說,整周基於該周星期六所在的月份,“屬於”特定月份。然后,您需要向后計算並計算給定月份,即該月份所有周的集合。

這將為您提供正向計算:

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)
  • 我使用datediff(day,@ date,@ known_date)而不是datepart(dw,@ date),因為它是確定性的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM