![](/img/trans.png)
[英]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.