【问题标题】:How to get the year of a date, depending on the weeknumber如何获取日期的年份,具体取决于周数
【发布时间】:2015-08-31 11:03:17
【问题描述】:

我知道如何使年份过时。但是如何根据该日期的周数获取日期的年份?

示例: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;

【问题讨论】:

  • 声明@date datetime = '12/28/2015' 选择 WeekNo = datepart(wk,@date), [Year] = year(@date)

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


【解决方案1】:

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

我这里有一个小例子:

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

【讨论】:

  • 这不是关于两个不同的日期,而是关于 1 个日期。我只举了两个例子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
  • 2021-12-25
  • 2020-12-14
  • 1970-01-01
相关资源
最近更新 更多