如果这样的假期是经常性的(即新年),我有一个整洁的假期表,显示日期和重复性
现在,我需要计算两个日期之间的假期数。如果它是一个简单的日期列表,没有关于重复的信息(即它会显示 2000 年 1 月 1 日到 2015 年 1 月 1 日之间的所有新年),那将很容易,即类似于
declare @start_Date Date= '2013-01-02',
@end_date Date ='2014-01-02'
SELECT COUNT(CE.name) AS holidays_count
FROM dbo.argo_cal_event AS CE INNER JOIN dbo.argo_cal_event_type AS CET
ON CE.event_type_gkey = CET.gkey
WHERE (CET.name = 'EXEMPT_DAY') AND (CE.name <> 'Sundays')
AND (CE.occ_start BETWEEN @start_Date AND @end_date)
但是现在我们有一个简洁的重复,所以上面的查询不会计算所有被宣布为“每年开始”发生的新年、圣诞节等。
我可以用这样的列表创建一个表,但我一直在想,还有其他方法吗?
编辑:让我准确地说出我的想法:如果事件发生一次,我想正常计算事件(我在这里假设用户必须填充所有不规则的假期,即复活节),但是当重复< > 一次,然后获取发生开始并计算该日期和最终日期之间的年数。
EDIT2:我想我已经明白了 - 对于我可以使用的经常性假期
SELECT sum (datediff (year, ce.occ_start, @end_date)) as recurrent_holidays
FROM dbo.argo_cal_event AS CE INNER JOIN dbo.argo_cal_event_type AS CET
ON CE.event_type_gkey = CET.gkey
WHERE (CET.name = 'EXEMPT_DAY') and (CE.repeat_interval ='ANNUALLY')
EDIT3:不幸的是,如果我想在两个日期之间计数,其中一个是从另一个表中取出的,即如果我想计算单元之间的经常性假期,那么这个解决方案不起作用(或者至少变得相当复杂)。 time_in 和 getddate() :/