sql-server - 从 SQL Server 2012 中的年、周数、日名称检索日期

标签 sql-server sql-server-2012

感谢大家阅读我的问题,我在通过提供年份、周数和日期名称从 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/

相关文章:

sql-server - 为什么在导入UTF-8平面文件时SSIS不能识别换行{LF}行定界符?

c# - 使用 Include 进行 Linq 分组

sql-server - 在sql函数中使用表名作为参数

sql - 预热数据库(将整个数据库放入缓存)

sql - 取消长时间运行的查询

sql - Microsoft SQL Server 2012 的新 Identity Jump 功能如何处理数据类型范围?

sql-server - 获取 SQL Server 中给定月份和年份的所有日期

sql-server - MDX DRILLTHROUGH 失败但选择可以成功执行

sql - 将普通密码转换为 EF Asp.Net Identity PasswordHash

sql-server - EF Core SQL Server 使用 GETDATE() 代替 C# DateTime.Now