[英]T-SQL calculate the first monday of the first ISO week in a year and enumerate all weeks as from-to periods
[英]T-SQL How to get Week Number (ISO) of First Week from all Quarters from GetDate()?
標題說得非常多。
但是更確切地說,我需要從GetDate()獲取任何給定年份中第1-4季度開始的每周的周數。
不知道這是內置的東西還是我必須為其編寫函數。
謝謝!
這很簡單,但是可以解決問題。 您可以將@date
設置為任何給定值。 我使用了getdate()
。
declare @date datetime = getdate()
declare @year int = datepart(year, @date)
select @year as [year]
,datepart(iso_week, cast('1/1/' + cast(@year as char(4)) as date)) as ISOWeekQ1
,datepart(iso_week, cast('4/1/' + cast(@year as char(4)) as date)) as ISOWeekQ2
,datepart(iso_week, cast('7/1/' + cast(@year as char(4)) as date)) as ISOWeekQ3
,datepart(iso_week, cast('10/1/' + cast(@year as char(4)) as date)) as ISOWeekQ4
對我來說,這返回了:
year ISOWeekQ1 ISOWeekQ2 ISOWeekQ3 ISOWeekQ4
----------- ----------- ----------- ----------- -----------
2017 52 13 26 39
這也有效,並且不會對不同日期格式(例如yyyy / mm / dd)使用cast()
或冒風險日期轉換錯誤:
declare @date datetime = getdate()
set @date = dateadd(day, - datepart(dayofyear, @date) + 1, @date) -- sets date to Jan 1
select datepart(year, @date) [year]
,datepart(iso_week, @date) as ISOWeekQ1
,datepart(iso_week, dateadd(month, 3, @date)) as ISOWeekQ2
,datepart(iso_week, dateadd(month, 6, @date)) as ISOWeekQ3
,datepart(iso_week, dateadd(month, 9, @date)) as ISOWeekQ4
該查詢的輸出與第一個查詢的輸出相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.