使用增量日期更新表

时间:2015-09-23 16:45:28

标签: sql

所以我有一个更新现有表格的查询,其中包含2周的日期。但是我遇到了一个问题。我将日期更新到表格中,但是我希望能够跳过结束日期之前的周末。这是我的查询和表格。正如我们在下面看到的那样,我试图添加一个where子句,但结果仍然让我在两周之间的中间周末。我怎样才能解决这个问题。 这是sqlfiddle:http://sqlfiddle.com/#!3/35365/1 after update

enter image description here

1 个答案:

答案 0 :(得分:1)

假设您尝试仅使用给定日期范围的工作日更新ProjectName表中的日期,则应首先确定日期范围内的工作日,然后相应地进行更新。

第一个CTE(DateRange)生成给定范围之间的所有日期。

第二次CTE(WeekDays)删除周末并分配行号。

第三次CTE(项目)将行号分配给ProjectName表中的记录,以便与WeekDays匹配

最后进行更新。

Declare @WeekEnding datetime
declare @Startdate datetime
set @WeekEnding = '2015-09-26'
set @Startdate = '2015-09-14'

;With DateRange AS (
    Select @StartDate NewDate, DATEPART(WEEKDAY, @StartDate) DayOfTheWeek
    Union All
    Select DATEADD(DAY, 1, NewDate), DATEPART(WEEKDAY, DATEADD(DAY, 1, NewDate)) From DateRange Where NewDate < @WeekEnding
), WeekDays AS (
    Select ROW_NUMBER() OVER(ORDER BY NewDate) RowNumber, NewDate, DayOfTheWeek 
    From DateRange Where DayOfTheWeek NOT IN (1, 7)
), Projects AS (
    Select ROW_NUMBER() OVER(ORDER BY PkId) RowNumber, PkId From ProjectName
) Update ProjectName
Set Day = WeekDays.NewDate
From ProjectName
Join Projects ON Projects.PkId = ProjectName.PkId
Join WeekDays ON WeekDays.RowNumber = Projects.RowNumber

注意:如果您要过滤在ProjectName上更新的记录,则应在项目中应用过滤器。

http://sqlfiddle.com/#!3/35365/13