在SQL中添加两天&;结果日期必须是一个工作日

在SQL中添加两天&;结果日期必须是一个工作日,sql,sql-server,Sql,Sql Server,我有一个日历表,有几个字段,下面的字段很有用,我想在表中添加一个新的列“承诺日期”,并使用下面的逻辑。我正在挣扎,需要帮助 示例:开始日期='01-02-2019',然后加上两天。结果应该是一个工作日 表名:=日期表 开始日期,IsBillingday=1(不包括假日和周末),WeekdayFlag=Weekday,DayNameOfWeekShort='Mon'…Friday 首先开始简单的思考 CASE WHEN DayNameOfWeekShort = 'Mon' AND ISBillin

我有一个日历表,有几个字段,下面的字段很有用,我想在表中添加一个新的列“承诺日期”,并使用下面的逻辑。我正在挣扎,需要帮助

示例:开始日期='01-02-2019',然后加上两天。结果应该是一个工作日

表名:=日期表

开始日期,IsBillingday=1(不包括假日和周末),WeekdayFlag=Weekday,DayNameOfWeekShort='Mon'…Friday

首先开始简单的思考

CASE WHEN DayNameOfWeekShort = 'Mon' AND ISBillingDay = '1' THEN CONVERT (nvarchar(10) , DATEADD(Day , 2 , dbo.DateTable.StartDate) , 23) 
WHEN DayNameOfWeekShort = 'Tue' AND ISBillingDay = '1' THEN CONVERT (nvarchar(10) , DATEADD(Day , 2 , dbo.DateTable.StartDate) , 23) 
WHEN DayNameOfWeekShort = 'Wed' AND ISBillingDay = '1' THEN CONVERT (nvarchar(10) , DATEADD(Day , 2 , dbo.DateTable.StartDate) , 23) 
WHEN DayNameOfWeekShort = 'Thu' AND ISBillingDay = '1' THEN CONVERT (nvarchar(10) , DATEADD(Day , 4 , dbo.DateTable.StartDate) , 23) 
WHEN DayNameOfWeekShort = 'Fri' AND ISBillingDay = '1' THEN CONVERT (nvarchar(10) , DATEADD(Day , 5 , dbo.DateTable.StartDate) , 23) ELSE '' END
但在某些情况下,结果不是一个工作日……如何转移到下一个工作日

这条线

CASE WHEN DayNameOfWeekShort = 'Mon' AND ISBillingDay = '1' THEN CONVERT (nvarchar(10) , DATEADD(Day , 2 , dbo.DateTable.StartDate) , 23)
结果不是一个工作日…然后需要添加+1天,并检查是否是一个工作日…如果不是添加+1…如果是..结束循环。
a

如果您希望下一个工作日在未来至少两天,则可以使用窗口功能。我想你有一个标志来标识一个工作日

逻辑如下所示:

select c.*,
       min(case when c.isworkingday = 1 then c.date end) over
           (order by c.date
            rows between 2 following and unbounded following)
           ) as next_workingday_plus_2
from calendar c;

请注意,您应该将日期存储为日期而不是字符串,尤其是在日历表中(除非您有一个或多个列具有特定格式的日期)。

您说您有日历表,对吗?所以我假设那张表上写着这一天是否是工作日;那么为什么不<引号<代码>排到需要的工作日之后呢?对于THU + 4和FRI+ 3应该总是带你到下星期一。更好的样本数据和逻辑会有帮助。星期四…我们只考虑2个工作日,然后我应该星期一。星期五…我们应该考虑2个工作日,那么我应该是星期二。FullDate是BillingDay Weekdayflag DayName PromiseDate评论2018年1月1日1工作日2018年1月3日星期二加上2018年1月2日1工作日2018年1月1日1工作日2018年1月8日星期三2018年1月4日公共假日2018年1月8日星期五2018年1月5日公共假日2018年1月1日0周末周六2018年1月6日0周末周日周日周日周日周日周日不适用2018年1月7日1个工作日2018年1月9日周一2018年1月8日1个工作日2018年1月9日周二1个工作日2018年1月10日星期三1个工作日周四