如何获取日期的年份,取决于周数

时间:2015-08-31 11:03:17

标签: sql-server database sql-server-2008 date

我知道如何把这一年带出约会。但是,如何获得日期的年份,具体取决于该日期的周数?

示例:28-12-2015的第1周(ISO_WEEK)。在这种情况下,周数不属于2015年,而是2016年。另外:1-1-2016:周数53,因此1-1-2016不属于2016年,而是属于2015年。

是否有在SQL中轻松完成此功能的功能?

不,没有,但我自己创建了它。

CREATE FUNCTION [dbo].[ISO_YEAR](@date DATETIME)
returns SMALLINT
AS
BEGIN
     DECLARE @ISO_YEAR SMALLINT = CASE
         WHEN DATEPART(ISO_WEEK, @date)=1
             AND MONTH(@date)=12 THEN YEAR(@date)+1
         WHEN DATEPART(ISO_WEEK, @date)=53
             AND MONTH(@date)=1 THEN YEAR(@date)-1
         WHEN DATEPART(ISO_WEEK, @date)=52
             AND Month(@date)=1 THEN YEAR(@date)-1             
         ELSE YEAR(@date)
        END;
     RETURN @ISO_YEAR;
END;

1 个答案:

答案 0 :(得分:0)

根据您的问题,您似乎有两个不同的日期,而且您无法确定此日期属于哪一年。

我在这里有一个小例子:

DECLARE @Date datetime, @Date1 datetime 
  SET @Date = '2015-12-28' 
  SET @Date1 = '2016-01-01' 


  SELECT CASE WHEN datepart(Wk , @Date ) < datepart(Wk , @Date1 ) THEN  (datepart(YEAR , @Date1 ) + 1)  ELSE (datepart(YEAR , @Date1 )) END AS GETYEAR 

输出: 2016

我强烈建议这不是了解这一年的正确方法。这里不是+/- 1逻辑。每年最多53周,你应该总是得到你的日期。

参考小提琴: http://sqlfiddle.com/#!3/9eecb7/4510