感谢大家阅读我的问题,我在通过提供年份、周数和日期名称从 SQL Server 2012 检索日期时遇到了一个大问题。
假设我有
Year = 2016
Week number = 1
Day Name ='FRI'
First day of week='SUN'
预期结果:
01-01-2016
我怎样才能做到这一点?
编辑:我从 here 找到了类似的解决方案但我没有月份名称。
最佳答案
我的建议是基于您提供的链接中问题的解决方案。 基本上,我创建了一个日历,其中保存从今年 1 月 1 日到之后 @x 周的日期,然后查询该日历:
-- provided data:
DECLARE @Year int = 2016,
@WeekNumber int = 1,
@DayName char(3) = 'Fri';
-- Calculate start date and end date
DECLARE @StartDate date,
@EndDate date;
SELECT @StartDate = CAST('01-01-'+ CAST(@Year as char(4)) as date),
@EndDate = DATEADD(WEEK, @WeekNumber, @StartDate)
-- Create the calendar
;WITH CTE AS
(
SELECT @StartDate as TheDate
UNION ALL
SELECT DATEADD(DAY, 1, TheDate)
FROM CTE
WHERE DATEADD(DAY, 1, TheDate) <= @EndDate
)
-- Finally, query the calendar:
SELECT TheDate
FROM CTE
WHERE DATEPART(WEEK, TheDate) = @WeekNumber
AND YEAR(TheDate) = @Year
AND DATENAME(WEEKDAY, TheDate) LIKE @DayName + '%'
OPTION(MAXRECURSION 0)
结果:
TheDate
----------
2016-01-01
注意:如果您指定的日期是星期一,则此解决方案不会返回任何行,因为 2016 年的第一周从星期五开始。
关于sql-server - 从 SQL Server 2012 中的年、周数、日名称检索日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35740510/