一尘不染

SQL获得ISO周的“泪SO年”

sql

我需要计算一周分配给的年份。例如,将2003年12月29日指定为2004年的第一周(我认为这仅适用于欧洲)。您可以使用以下代码查看一下:

SELECT DATEPART(isowk, '20141229');

但是,现在我需要一种简单的方法来获取本周的年份。我目前所做的并不那么优雅:

DECLARE @week int, @year int, @date char(8)

--set @date = '20150101'
set @date = '20141229'


SET @week = cast(datepart(isowk, @date) as int)

if @week = 1
begin
      if DATEPART(MONTH, @date) = 12
      begin
            set @year = DATEPART(year, @date) + 1
      end
      else
      begin
            set @year = DATEPART(year, @date)
      end
end

select @date "DATE", @week "WEEK", @year "YEAR"

如果有人知道更优雅的方式,那将是很好的:-)


阅读 141

收藏
2021-03-10

共1个答案

一尘不染

该解决方案没有为date返回正确的值'1-1-2027'

以下内容将返回我测试过的所有日期(以及测试了很多时间)的正确值。

SELECT YEAR(DATEADD(day, 26 - DATEPART(isoww, '2012-01-01'), '2012-01-01'))

摘自:https :
//capens.net/content/sql-year-iso-week

2021-03-10