gpt4 book ai didi

sql-server-2008 - "neater"节假日计算方式

转载 作者:行者123 更新时间:2023-12-04 07:09:11 24 4
gpt4 key购买 nike

我有一张整洁的假期表,如果此类假期是经常性的(即新年),则显示日期和重复

enter image description here

现在,我需要计算两个日期之间的假期数。如果它是一个没有重复信息的简单日期列表(即它会显示 2000-01-01 和 2015-01-01 之间的所有新年),那将很容易,即类似于

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:不幸的是,如果我想在两个日期之间进行计数,而其中一个日期取自另一张表,即如果我想计算重复假期,则此解决方案不起作用(或者至少变得相当复杂)在 unit.time_in 和 getddate() 之间:/

最佳答案

最直接的方法是让它们都一次性出现。

table 不会那么大到您每个星期天都无法添加。每年只有 52 或 53 个条目。

如果你现在这样做,你可以做类似的事情,

select count(*) from events where event_date between start_date and end_date

完成。

不过,这样做的主要原因是您的一些假期很难计算。您需要计算(或查找)耶稣受难日、复活节星期一和其他日期。它们基于月相。

为什么不将它们全部计算出来,让您的查询变得非常简单?

最后,你的数据结构有多“整洁”并不重要,而更重要的是你的代码是否做了它应该做的事情、完成它需要多长时间以及需要付出多少努力让它工作。

关于sql-server-2008 - "neater"节假日计算方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19105034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com