例如我知道年份和星期数
year = 2016
week = 1
如何根据 ISO 8601 从中获取一周的第一天?
我在表 datetime2[0]
中生成默认值 2015-12-28
的日期类型,但一周的第一天应该是 2016-01- 04
有什么想法吗?
最佳答案
给定任何日期,此 SQL 将返回 ISO 周:SELECT DATEPART(ISO_WEEK, @date)
。下面是一个丑陋(但非常有效)的单行代码,用于计算该 ISO 周的第一个日期:
DECLARE @date DATETIME = '2012-09-16'
SELECT (
CASE DATEPART(ISO_WEEK, @date)
WHEN DATEPART(ISO_WEEK, DATEADD(DAY,-6,@date)) THEN DATEADD(DAY,-6,@date)
WHEN DATEPART(ISO_WEEK, DATEADD(DAY,-5,@date)) THEN DATEADD(DAY,-5,@date)
WHEN DATEPART(ISO_WEEK, DATEADD(DAY,-4,@date)) THEN DATEADD(DAY,-4,@date)
WHEN DATEPART(ISO_WEEK, DATEADD(DAY,-3,@date)) THEN DATEADD(DAY,-3,@date)
WHEN DATEPART(ISO_WEEK, DATEADD(DAY,-2,@date)) THEN DATEADD(DAY,-2,@date)
WHEN DATEPART(ISO_WEEK, DATEADD(DAY,-1,@date)) THEN DATEADD(DAY,-1,@date)
ELSE DATEADD(DAY,0,@date)
END
) FirstDayOfISOWeek
现在,这不是我最漂亮的作品,但它通过反复试验工作 - 测试多少天前的 ISO 周仍然相同,然后返回那一天。
关于sql-server-2008 - 当我知道 ISO 8601 中的周数时如何获得一周的第一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34267447/