在两个字段之间计算Oracle中的工作日(MF)

时间:2018-08-13 21:37:57

标签: sql oracle

我只需要计算两个字段之间的工作日。下面的语句有效,但是我只需要它来计算工作日(M-F)。不确定该怎么做。

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

from Table1

1 个答案:

答案 0 :(得分:1)

通过自然断点通常可以最轻松地解决此类问题。在这种情况下,自然断点是ISO周的开始。您可以将trunciw格式模型一起使用以截断此类自然点。

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

如果出院日期不是星期一,请先计算出M-F,直到出院周的星期一,然后再加上直到出院的M-F天。就是这样

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

同样,您可以计算入学周星期一至实际入学日期之间的M-F天。

最后,将所有内容放在一起。公式整齐地分为三个部分:

(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'))

(请注意,显然,第一个“星期一调整”已添加,但第二个已减去!)