SQL Server从星期数和年份中检索星期开始日期和星期结束日期

时间:2020-09-24 13:43:38

标签: sql sql-server

我需要获取一年中一周的开始日期和结束日期。

这是我的输入内容

YEAR = 2019 WEEK = 32

结果将是:05/08/201911/08/2019

我尝试过:

select (dateadd(week,32-(1),dateadd(week,datediff(week,(-1),dateadd(year,datediff(year,(0),getdate()),(0))),(0))))
select (dateadd(week,32+datediff(week,(0),dateadd(year,datediff(year,(0),getdate()),(0))),(-1)))

但没有年份输入,因此仅适用于当前年份 我需要将此函数放入计算字段中,以创建表

2 个答案:

答案 0 :(得分:1)

一个可能的选择是以下语句:

DECLARE @year int = 2019
DECLARE @week int = 32
DECLARE @date date

SELECT @date = DATEADD(week, (@week - 1), DATEFROMPARTS(@year, 1, 1))
SELECT
   @date AS CurrentDay,
   DATEADD(day, - DATEPART(weekday, @date) + 1, @date) AS StartOfTheWeek,
   DATEADD(day, 7 - DATEPART(weekday, @date), @date) AS EndOfTheWeek

结果:

CurrentDay  StartOfTheWeek  EndOfTheWeek
2019-08-06  2019-08-05      2019-08-11

如果要定义具有计算列的表:

CREATE TABLE Data (
    [Year] int,
    [Week] int,
    [Start_Date] AS DATEADD (
        day, 
        - DATEPART(weekday, DATEADD(week, ([Week] - 1), DATEFROMPARTS([Year], 1, 1))) + 1, 
        DATEADD(week, ([Week] - 1), DATEFROMPARTS([Year], 1, 1))
    ),
    [End_Date] AS DATEADD (
        day, 
        7 - DATEPART(weekday, DATEADD(week, ([Week] - 1), DATEFROMPARTS([Year], 1, 1))),
        DATEADD(week, ([Week] - 1), DATEFROMPARTS([Year], 1, 1))
    )
)

INSERT INTO Data ([Year], [Week])
VALUES (2019, 32)

答案 1 :(得分:0)