简体   繁体   中英

T-SQL How to get Week Number (ISO) of First Week from all Quarters from GetDate()?

The title says it pritty much.

But to be more precise, I need to get the Week Number of each week first starting in Quarters 1-4 from any given year from GetDate().

Not sure if this is something that's built in or I have to write a function for.

Thanks!

This is simple, but does the trick. You would set @date to any given value. I used 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

For me, this returned:

year        ISOWeekQ1   ISOWeekQ2   ISOWeekQ3   ISOWeekQ4
----------- ----------- ----------- ----------- -----------
2017        52          13          26          39

This also works, and doesn't use cast() or risk date conversion errors for different formats of the date (eg, yyyy/mm/dd):

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

The output of this query is the same as the first.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM