【发布时间】: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