簡體   English   中英

立即計算兩個日期之間的工作日 Oracle

[英]Calculate Business Days between two Dates Oracle Rightnow

我在 Oracle RightNow 工作,我使用下面的方法來計算兩個日期之間的工作日,但是隨着新年,邏輯似乎不再起作用。 這將是客戶自定義報告列中使用的代碼。

((DATE_DIFF(sysdate(),incidents.created)/86400) + 1) - ((to_number(date_format(sysdate(),'WW')) - to_number(date_format(incidents.created,'WW')))* 2) - IF(Date_format(incidents.created,'DAY') = 'Sunday',1,0) - IF(Date_format(sysdate(),'DAY') = 'Saturday',1,0)

是否有不同的代碼可以用來完成此任務而不會因新的一年而中斷?

謝謝,乙

您可以使用此 Oracle 答案

SELECT ( TRUNC( SYSDATE, 'IW' ) - TRUNC( created, 'IW' ) ) * 5 / 7
       + LEAST( SYSDATE - TRUNC( SYSDATE, 'IW' ) + 1, 5 )
       - LEAST( created - TRUNC( created, 'IW' ) + 1, 5 )
          AS WeekDaysDifference
FROM   incidents;

其中,對於樣本數據:

CREATE TABLE incidents ( created ) AS
SELECT DATE '2020-12-31' FROM DUAL UNION ALL
SELECT DATE '2021-01-01' FROM DUAL UNION ALL
SELECT SYSDATE FROM DUAL

輸出:

  | 平日差異 |  |  ---------------------------------------: |  |  2.83034722222222222222222222222222222222 |  |  1.83034722222222222222222222222222222222 |  |  0 |

db<> 在這里擺弄

查看 Oracle RightNow CRM 文檔,您可以將 Oracle 解決方案轉換為:

DATE_DIFF(
  DATE_TRUNC( SYSDATE(), 'IWEEKS' ),
  DATE_TRUNC( incidents.created, 'IWEEKS' )
) / 86400 * 5 / 7
+
IF (
  DATE_DIFF(SYSDATE(), DATE_TRUNC(SYSDATE(), 'IWEEKS')) / 86400 < 5,
  DATE_DIFF(SYSDATE(), DATE_TRUNC(SYSDATE(), 'IWEEKS')) / 86400,
  5
)
-
IF (
  DATE_DIFF(incidents.created, DATE_TRUNC(incidents.created, 'IWEEKS')) / 86400 < 5,
  DATE_DIFF(incidents.created, DATE_TRUNC(incidents.created, 'IWEEKS')) / 86400,
  5
)

(注意:我無權訪問 Oracle RightNow 環境,因此轉換未經測試且僅基於文檔,可能存在錯誤或可能的改進;但是,希望為您提供解決方案就足夠了。)

Oracle B2C 服務(FKA RightNow)目前不使用 Oracle DB。 而且,分析工具的語法是應用程序獨有的,而不是底層數據庫。 因此,有關基於 SQL 的解決方案的建議將不起作用。

您的邏輯似乎受到您在 date_format function 中使用WW轉換日期的影響,這是 function 的第一個參數中日期的周數。 這在新的一年重置為 1,這就是為什么你可能會得到你現在的行為; 您沒有考慮方程式中多年的重要性。

您為其構建報告的組織是否在 B2C 服務中設置了工作時間? 如果是這樣,那么您也許可以使用rel_date_diff簡化您的公式,這可能會為您處理一些工作日/周末邏輯。 您可以嘗試使用date_diff “蠻力”等式,然后計算差異的周數,然后將其乘以每周 5 個工作日。 但是,根據您認為是一周的第一天以及運行報告的時間,您會收到異常情況。 使用文檔找到合適的函數來幫助你。

最后一個選項是構建分析報告擴展,但如果您無法使用分析中的開箱即用功能開發方程式,則該選項將起作用。 您的擴展自定義代碼可以實現您需要的日期處理邏輯(在 C# 中用於 .NET 控制台和 JavaScript 用於 BUI - 希望您的客戶已移至 BUI)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM