以小时和分钟为单位选择两个日期的差异

时间:2021-05-13 06:38:34

标签: sql oracle oracle-sqldeveloper

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

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;

显然它返回天数差异,因此输出将为0, 我期待 01:15 之类的东西

2 个答案:

答案 0 :(得分:1)

根据您的结果所需的数据类型...

如果 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 不支持间隔的聚合函数;所以如果你需要一个这样的差异的总和,你应该先应用聚合,最后一步只使用这个技巧来转换为间隔。

答案 1 :(得分:0)

除了@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}')

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