在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_lanage )='SAT' THEN 1 ELSE 0 END)
這裡,TRUNC() 刪除了日期中的時間部分,TO_CHAR() 提取工作日。現在,計算包含了截斷日期之間的天數、減去週末,並調整週末開始或結束日期。
透過合併這些改進,該公式可以準確計算工作日,與 Excel 中的 NETWORKDAYS 函數保持一致.
以上是如何在不使用函數或流程的情況下準確計算 Oracle SQL 中兩個日期之間的工作日?的詳細內容。更多資訊請關注PHP中文網其他相關文章!