Oracle报表合规时间阈值调整求助:周一2pm改11am
Oracle合规时间阈值调整方案
原数值含义
原代码里的8.589是天数单位,计算逻辑是:
- 整数部分
8代表8天 - 小数部分
0.589≈14/24,对应下午2点(14小时)在一天中的占比
新阈值计算
要调整为周一上午11点,对应的小数部分是11/24≈0.4583,所以完整的天数阈值可以写为8.458(或更精确的8.4583)。
推荐更易维护的写法
硬编码小数容易出错,建议直接用日期运算替代,可读性更强,后续调整时间也更方便:
将(transaction_date - TO_DATE(TRUNC(SCHEDULED_COMPLETION_DATE - 1,'D'))) >= 8.589替换为:
transaction_date >= TRUNC(SCHEDULED_COMPLETION_DATE - 1,'D') + 8 + 11/24
或者用Oracle的INTERVAL语法,语义更清晰:
transaction_date >= TRUNC(SCHEDULED_COMPLETION_DATE - 1,'D') + INTERVAL '8 11:00' DAY TO MINUTE
修改后的完整代码
( CASE WHEN sysdate >= TRUNC(SCHEDULED_COMPLETION_DATE - 1,'D') + 8 + 11/24 AND ACTUAL_END_DATE IS NULL THEN 'NON-COMPLIANT' WHEN TO_NUMBER(TO_CHAR(SCHEDULED_COMPLETION_DATE,'YYYY') || TO_CHAR(SCHEDULED_COMPLETION_DATE,'iw')) <> TO_NUMBER(TO_CHAR(ACTUAL_END_DATE,'YYYY') || TO_CHAR(ACTUAL_END_DATE,'iw')) AND ACTUAL_END_DATE IS NOT NULL THEN 'NON-COMPLIANT' WHEN transaction_date >= TRUNC(SCHEDULED_COMPLETION_DATE - 1,'D') + 8 + 11/24 AND ACTUAL_END_DATE IS NOT NULL THEN 'NON-COMPLIANT' WHEN RECONCILIATION IN ('MISSED(PM)', 'CANCELLED') THEN 'NON-COMPLIANT' ELSE 'COMPLIANT' END ) AS REMARKS
注:第一个WHEN条件原阈值对应下午2点,这里已同步调整为上午11点,若需保留原逻辑可自行回退。
内容的提问来源于stack exchange,提问作者Mon
相关产品推荐
相关产品推荐

