您好,我有一个查询,它计算以分钟为单位计算的日期差异(不包括周末),但 sintax 在 Oracle 中不起作用,请帮忙
选择 ( DATEDIFF(分钟,创建日期,状态日期) - ( DATEDIFF(周、创建日期、状态日期)(22460) ——周日结束 -(CASE WHEN DATEPART(dw, status_date) = 1 THEN 24.060-DATEDIFF(分钟,CONVERT(date,status_date),status_date) ELSE 0 END) ——周六开始 -(CASE WHEN DATEPART(dw, create_date) = 7 THEN DATEDIFF(分钟,CONVERT(date,create_date),create_date) ELSE 0 END) ——周六结束 +(CASE WHEN DATEPART(dw, status_date) = 7 THEN DATEDIFF(分钟,CONVERT(日期,status_date),status_date) ELSE 0 END) ——周六开始 +(CASE WHEN DATEPART(dw, create_date) = 1 THEN 24.0*60-DATEDIFF(分钟,CONVERT(date,create_date),create_date) ELSE 0 END) ) ) 作为 min_diff 来自表_名称
谢谢你
您可以使用:
SELECT TO_CHAR( start_date, 'YYYY-MM-DD HH24:MI:SS "("DY")"') AS start_date,
TO_CHAR( end_date, 'YYYY-MM-DD HH24:MI:SS "("DY")"') AS end_date,
ROUND(
(
( TRUNC( end_date, 'IW' ) - TRUNC( start_date, 'IW' ) ) * 5 / 7
+ LEAST( end_date - TRUNC( end_date, 'IW' ), 5 )
- LEAST( start_date - TRUNC( start_date, 'IW' ), 5 )
) * 24 * 60,
2
) AS Num_Week_Day_Minutes
FROM table_name;
对于样本数据:
CREATE TABLE table_name ( start_date, end_date ) AS
SELECT DATE '2024-04-12' + INTERVAL '23:59:00' HOUR TO SECOND,
DATE '2024-04-15' + INTERVAL '00:01:00' HOUR TO SECOND
FROM DUAL UNION ALL
SELECT DATE '2024-04-05' + INTERVAL '00:00:00' HOUR TO SECOND,
DATE '2024-04-15' + INTERVAL '00:00:00' HOUR TO SECOND
FROM DUAL UNION ALL
SELECT DATE '2024-04-14' + INTERVAL '23:59:00' HOUR TO SECOND,
DATE '2024-04-15' + INTERVAL '00:01:00' HOUR TO SECOND
FROM DUAL
输出:
START_DATE | END_DATE | NUM_WEEK_DAY_MINUTES |
---|---|---|
2024-04-12 23:59:00(周五) | 2024-04-15 00:01:00(周一) | 2 |
2024-04-05 00:00:00(周五) | 2024-04-15 00:00:00(周一) | 8640 |
2024-04-14 23:59:00(周日) | 2024-04-15 00:01:00(周一) | 1 |