小编典典

ISO8601将星期日期转换为日历日期

sql

我正在尝试确定ISO 8601格式中给定的星期几(即YYYY-W ##)的日期。我的最终目标是将ISO 8601星期日期转换为ISO
8601日历日期。我需要在TSQL中执行此操作(我正在使用SQL Server 2005),我不确定SQL Server
05是否已内置任何允许此操作的内容,但这将有助于查看其他语言的示例或用通用伪代码

更新:

抱歉,我的问题结构令人困惑。基本上,我有一个ISO8601星期日期,我试图将其转换为ISO8601日历日期。

示例(来自Wikipedia

ISO 8601周日期:2012-W02(YYYY-W ##)

转换成…

ISO 8601日历日期:2012-01-09(YYYY-MM-DD)

由于在我的星期日期示例中未提供日期部分,因此可以假定为星期的第一天。


阅读 305

收藏
2021-04-22

共1个答案

小编典典

请尝试以下解决方案:

declare 
    @date varchar(10)
    ,@convertedDate datetime
    ,@wk int
    ,@yr int

set @date = '2012-W02';

set @yr = parsename(replace(@date, '-W', '.'), 2)
set @wk = parsename(replace(@date, '-W', '.'), 1)

set @convertedDate = convert(varchar(10), dateadd(week, @wk, dateadd (year, @yr-1900, 0)) - 5 - datepart(dw, dateadd (week, @wk, dateadd (year, @yr-1900, 0))), 121)

select 
    'Year' = @yr
    ,'Week' = @wk
    ,'Date' = @convertedDate

输出:

-----------------------------------------
| Year | Week |         Date            |
-----------------------------------------
| 2012 |   2  | 2012-01-09 00:00:00.000 |
-----------------------------------------
2021-04-22