如何:计算工作日-纯SQL方法。

恕我直言,以下内容不是解决特定问题的方法指导,而是更多的概念验证性内容,展示了SQL的可能性。

因此,让我们说问题是要计算工作日计数,该工作日计数定义为不包括周末和节假日的天数(在当前实施中为可选值)。

假设要计算的期间存储在与联系人关联的表中。

[tblPeriods]

keyPeriodID-自动编号(长),PK

keyContactID-Long,FK(tblContacts)

dteStart-日期/时间

dteEnd-日期/时间

目标是接收包含顺序日期的数据集,该日期属于表中存储的日期时段,不包括周末和节假日。 然后,一个简单的分组查询将返回所需的结果。

步骤1.获取记录。

为了使所有日期都落入时段,我们需要将[tblPeriods]与包含所有顺序日期的数据集进行外部联接。

显然,使用存储所有日期的表不是一个明智的选择。 ;)

更好地动态生成它。

显然,日历日期不过是1-31天数字,1-12个月数字和合理的年数范围的所有可能组合。 当然,不存在的日期(例如12月30日,有时是12月29日)必须省略。

这给出了使用以下数据集的笛卡尔联接的想法:

[tblDays]

lngDay-Long,PK-自然数设置为1-31

[tblMonts]

lngMonth-Long,PK-自然数设置为1-12

[tblYears]

lngYear-Long,PK-自然数集... :) ...让我们说2000-2014

以下查询会将这些值组合到2000-2014年的固定日历中,使用DateSerial()函数的功能将不存在的日期排除在外,以防止在非法的argumnets中包装日期。

查询:[qryFlatCalendar]


SELECT DateSerial(tblYears.lngYear,tblMonths.lngMonth,tblDays.lngDay) AS dteDate,
tblYears.lngYear, tblMonths.lngMonth, tblDays.lngDay
FROM tblYears, tblMonths, tblDays
WHERE tblDays.lngDay=Day(DateSerial([tblYears].[lngYear],[tblMonths].[lngMonth],[tblDays].[lngDay])); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值