在 Oracle SQL 中计算工作日(不带函数或过程)
在 Oracle SQL 中使用以下公式计算两个日期之间的工作日:
((to_char(CompleteDate,'J') - to_char(InstallDate,'J')) 1) - ((to_char(CompleteDate,'WW') (52 ((to_char(CompleteDate,'YYYY') - to_char(InstallDate,'YYYY')))) ) - to_char(InstallDate,'WW'))2)
可能会产生结果大多准确,偶尔会有 2 天或更短的偏差。这种不一致源于忽略以下因素:
为了解决这些问题,需要更准确的公式是:
(TRUNC(CompleteDate) - TRUNC(InstallDate) ) 1 -
((((TRUNC(CompleteDate,'D'))-(TRUNC(InstallDate,'D')))/ 7)*2) -
(情况TO_CHAR(InstallDate,'DY','nls_date_language=english')='SUN' THEN 1 ELSE 0 END) -
(CASE WHEN TO_CHAR(CompleteDate,'DY','nls_date_language=english')='SAT' THEN 1 ELSE 0 END)
这里,TRUNC() 删除了日期中的时间部分,TO_CHAR() 提取工作日。现在,计算包含了截断日期之间的天数、减去周末,并调整周末开始或结束日期。
通过合并这些改进,该公式可以准确计算工作日,与 Excel 中的 NETWORKDAYS 函数保持一致.
以上是如何在不使用函数或过程的情况下准确计算 Oracle SQL 中两个日期之间的工作日?的详细内容。更多信息请关注PHP中文网其他相关文章!