首页 > 解决方案 > 在 Oracle 中计算两个字段之间的工作日 (MF)

问题描述

我只需要计算两个字段之间的工作日。以下语句有效,但我只需要它来计算工作日(MF)。不知道该怎么做。

Select 
TRUNC(HF.ACTUL_DSCHRG_DTTM) - TRUNC(HF.ACTUL_ADMIS_DTTM) AS DAYS

from Table1

标签: sqloracle

解决方案


此类问题通常通过参考自然断点最容易解决。在这种情况下,自然断点是 ISO 周的开始。您可以使用trunc格式iw模型来截断到这样的自然点。

如果trunc(discharge_dttm)trunc(admission_dttm)都是星期一的午夜,则计算很简单:从出院日期中减去入院日期,除以 7 并乘以 5。

如果出院日期不是星期一,则先计算出院周的星期一之前的 MF,然后将 MF 天数相加直到出院。那简直就是

least(5, trunc(discharge_dttm) - trunc(discharge_dttm, 'iw'))

同样,您可以计算入学周的星期一和实际入学日期之间的 MF 天数。

最后,把所有东西放在一起。该公式巧妙地分为三个部分:

(trunc(discharge_dttm, 'iw') - trunc(admission_dttm, 'iw')) * 5 / 7 +
least(5, trunc(discharge_dttm) - trunc(discharge_dttm, 'iw'))       -
least(5, trunc(admission_dttm) - trunc(admission_dttm, 'iw'))

(注意,很明显,第一个“调整到星期一”被添加了,但第二个被减去了!)


推荐阅读