如何修改将 DATEDIFF 转换为 Oracle 接受的语法的查询?

问题描述 投票:0回答:1

您好,我有一个查询,它计算以分钟为单位计算的日期差异(不包括周末),但 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 来自表_名称

谢谢你

sql oracle
1个回答
0
投票

您可以使用:

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

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.