首頁 >資料庫 >mysql教程 >如何在不使用函數或流程的情況下準確計算 Oracle SQL 中兩個日期之間的工作日?

如何在不使用函數或流程的情況下準確計算 Oracle SQL 中兩個日期之間的工作日?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-04 03:53:39219瀏覽

How to Accurately Calculate Business Days Between Two Dates in Oracle SQL Without Using Functions or Procedures?

在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 天或更短的偏差。這種不一致源自於忽略以下因素:

  • 公式假設所有月份都有 30 天,這是不正確的。
  • 它不包括週末(週六和週日)。

為了解決這些問題,需要更精確的公式是:

(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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn