select 两个日期的时分差

select difference of two dates in hours and minutes

我有以下问题, 我正在尝试以小时和分钟为单位找出两个日期的差异,例如

select to_date('13.05.2021 09:30','DD.MM.YYYY HH24:MI') 
     - to_date('13.05.2021 08:15','DD.MM.YYYY HH24:MI') from dual;

显然它 returns 天数不同,所以输出将为 0, 我期待 01:15

之类的东西

取决于结果所需的数据类型...

如果 interval day to second 可行,那么您可以这样做:

select (date2 - date1) * interval '1' day from dual;

例如:

select (to_date('13.05.2021 09:30','DD.MM.YYYY HH24:MI') 
      - to_date('13.05.2021 08:15','DD.MM.YYYY HH24:MI'))
      * interval '1' day as diff
from   dual;

DIFF               
-------------------
+00 01:15:00.000000

试一试;如果您需要不同的数据类型作为结果,请告诉我们。请注意,愚蠢的是,Oracle 不支持间隔的聚合函数;所以如果你需要这些差异的总和,你应该首先应用聚合,并且只在最后一步使用这个技巧转换为一个区间。

如果您需要特定的输出格式,除了@mathguy 回答之外:

TO_CHAR 不适用于 INTERVAL 值。要么使用 EXTRACT

EXTRACT(HOUR FROM ((date2 - date1) DAY TO SECOND)) ||':'|| EXTRACT(MINUTE FROM ((date2 - date1) DAY TO SECOND))

REGEXP_SUBSTR

REGEXP_SUBSTR((date2 - date1) DAY TO SECOND, ' \d{2}:\d{2}')

您可能需要进行一些微调才能获得正确的输出。