繁体   English   中英

T-SQL如何从GetDate()获得所有季度的第一周的星期数(ISO)?

[英]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.

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