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

Sql 选择以小时和分钟为单位的两个日期之差,sql,oracle,oracle-sqldeveloper,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的情况 如果从一天到第二天的间隔有效,则可以执行以下操作: select (date2 -

我有以下问题,, 例如,我试图找出两个日期在小时和分钟内的差异

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的情况

如果
从一天到第二天的间隔
有效,则可以执行以下操作:

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 answer之外,如果您需要特定的输出格式:

TO_CHAR
不适用于
间隔值。任用


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

您好,非常感谢它的工作原理,我需要它的格式为HH24:MI(01:15),如何转换它?对于trunc和to_char,它不起作用,那么您需要使用
substr
regexp_substring
。与日期值不同的是,间隔格式是固定的。您不需要其中的乘法
(date2-date1)DAY TO SECOND
将以间隔形式直接返回值。是否有方法缩小此示例的精度,仅显示小时和分钟?@liviuefros-您可以只显示小时和分钟,但是您希望将其舍入还是截断(假设差异不是整数分钟数)?另外,如果结果超过24小时,您需要显示什么?
03 04:30
(天、小时、分钟)比
76:30
(小时、分钟)好还是坏?当然,您可以轻松地将原始差异(以天为单位)乘以1440(每天分钟),四舍五入或截断为整数值,然后将这些分钟转换为小时:分钟;但是为什么呢?这是怎么用的?你也可以。你的差距能超过24小时吗?如果能,你想如何证明这一点?如果不是,你可以。有很多选择……一个重要的考虑因素是舍入。字符串函数将始终截断,它们不会四舍五入到最接近的整数值。
EXTRACT(HOUR FROM ((date2 - date1) DAY TO SECOND)) ||':'|| EXTRACT(MINUTE FROM ((date2 - date1) DAY TO SECOND))
REGEXP_SUBSTR((date2 - date1) DAY TO SECOND, ' \d{2}:\d{2}')