我正在尝试确定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)
由于在我的星期日期示例中未提供日期部分,因此可以假定为星期的第一天。
请尝试以下解决方案:
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 | -----------------------------------------