在SQL中添加两天&;结果日期必须是一个工作日
我有一个日历表,有几个字段,下面的字段很有用,我想在表中添加一个新的列“承诺日期”,并使用下面的逻辑。我正在挣扎,需要帮助 示例:开始日期='01-02-2019',然后加上两天。结果应该是一个工作日 表名:=日期表 开始日期,IsBillingday=1(不包括假日和周末),WeekdayFlag=Weekday,DayNameOfWeekShort='Mon'…Friday 首先开始简单的思考在SQL中添加两天&;结果日期必须是一个工作日,sql,sql-server,Sql,Sql Server,我有一个日历表,有几个字段,下面的字段很有用,我想在表中添加一个新的列“承诺日期”,并使用下面的逻辑。我正在挣扎,需要帮助 示例:开始日期='01-02-2019',然后加上两天。结果应该是一个工作日 表名:=日期表 开始日期,IsBillingday=1(不包括假日和周末),WeekdayFlag=Weekday,DayNameOfWeekShort='Mon'…Friday 首先开始简单的思考 CASE WHEN DayNameOfWeekShort = 'Mon' AND ISBillin
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;
请注意,您应该将日期存储为日期而不是字符串,尤其是在日历表中(除非您有一个或多个列具有特定格式的日期)。您说您有日历表,对吗?所以我假设那张表上写着这一天是否是工作日;那么为什么不<