SQL Server 2016-动态日期为期四周(星期六至星期五)

时间:2020-11-04 13:08:41

标签: sql sql-server date dynamic

我正在使用SQL Server 2016 我需要两列填充日期。

第一栏: 可以说今天是2020年11月4日星期三。我想要的日期是从上周五(在这种情况下为10/30/2020)到周六的四个星期(即10/3/2020)

第二列: 在下一列中,我希望该周的星期五日期重复整周,因此该列应具有四个不同的日期。

它应该看起来像这样。

calDate     WeekendDate
10/3/2020   10/9/2020
10/4/2020   10/9/2020
10/5/2020   10/9/2020
10/6/2020   10/9/2020
10/7/2020   10/9/2020
10/8/2020   10/9/2020
10/9/2020   10/9/2020
10/10/2020  10/16/2020
10/11/2020  10/16/2020
10/12/2020  10/16/2020
10/13/2020  10/16/2020
10/14/2020  10/16/2020
10/15/2020  10/16/2020
10/16/2020  10/16/2020
10/17/2020  10/23/2020
10/18/2020  10/23/2020
10/19/2020  10/23/2020
10/20/2020  10/23/2020
10/21/2020  10/23/2020
10/22/2020  10/23/2020
10/23/2020  10/23/2020
10/24/2020  10/30/2020
10/25/2020  10/30/2020
10/26/2020  10/30/2020
10/27/2020  10/30/2020
10/28/2020  10/30/2020
10/29/2020  10/30/2020
10/30/2020  10/30/2020

更新

下面的代码为我提供了第一列,我需要获取填充第二列的逻辑。在获取该相关日期的星期五日期方面需要帮助。

注意:在这种情况下,一周是从星期六到星期五


IF OBJECT_ID('tempdb..#DATE1') IS NOT NULL
BEGIN
DROP TABLE #DATE1 
END;

DECLARE @tmpDates1 TABLE (calDate DATETIME)
DECLARE @beginDate DATETIME
SET @beginDate = DATEADD(wk, DATEDIFF(wk,0,GETDATE())-5, 5)
WHILE @beginDate < DATEADD(wk, DATEDIFF(wk,0,GETDATE())-1, 5)
BEGIN
    INSERT INTO @tmpDates1 ([calDate]) VALUES (@beginDate)
    SET @beginDate = DATEADD(DAY,1,@beginDate)
END


SELECT * iNTO #date1 FROM @tmpDates1

select * from #date1

1 个答案:

答案 0 :(得分:0)

为此,您需要一个日期作为比较。举一个例子:

DECLARE @CompFriday DATE = '2020-01-03'

DECLARE @t TABLE(
  MyDate DATE
)

INSERT INTO @t VALUES
('2020-11-04')
,('2020-11-05')
,('2020-11-06')
,('2020-11-07')
,('2020-11-08')
,('2020-11-09')
,('2020-11-10')
,('2020-11-11')

SELECT *
      ,DATEADD(d, -1 * DATEDIFF(d, @CompFriday, MyDate)%7, MyDate)
  FROM @t