gpt4 book ai didi

sql - 如何在 SQL Server 中将日期正确转换为 ISO-8601 周数格式?

转载 作者:行者123 更新时间:2023-12-04 21:48:00 28 4
gpt4 key购买 nike

ISO-8601 声明周数的格式为 YYYY-W## - 请注意周数应为两位数,如 01、02、...


SELECT cast(DATEPART(YYYY, CreationDate) as varchar) + '-W' +
cast(DATEPART(ISO_WEEK, GETDATE())`

问题是这给出了周数 1, 2, ...

2020-W01的正确解压方法是什么,...

最佳答案

原始问题文本涉及 ISO_WEEK 编号的简单格式问题,但我觉得这里有一个更大的问题,即年份部分的串联。简单地连接 DatePart YYYY 和 ISO_WEEK 将在第 1 周和/或第 53 周产生不正确的(或至少是意外的)结果。值得注意的是,像 2014-12-31 这样的日期是第 1 周的一部分,但不是 2014-W01。它是 2015-W01 的一部分。同样,2016-01-01 将成为 2015-W53 的一部分,而不是 2016-W53。为了确定 Iso 年-周,必须更正年份以考虑到这一点:

With
Dates (Date) As (
Select Convert( date, N'2014-12-31' )
Union All Select Convert( date, N'2015-01-01' )
Union All Select Convert( date, N'2015-12-31' )
Union All Select Convert( date, N'2016-01-01' )
)
Select
src.Date
, Concat( Case
When DatePart( Month, src.Date ) = 12 And DatePart( ISO_WEEK, src.Date ) = 1 Then DatePart( Year, src.Date ) + 1
When DatePart( Month, src.Date ) = 1 And DatePart( ISO_WEEK, src.Date ) > 50 Then DatePart( Year, src.Date ) - 1
Else DatePart( Year, src.Date )
End, N'-W', Right( Concat( N'00', DatePart( ISO_WEEK, src.Date ) ), 2 ) ) As IsoYearWeek
From
Dates src
;

关于sql - 如何在 SQL Server 中将日期正确转换为 ISO-8601 周数格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13322453/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com