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

Posted

技术标签:

【中文标题】以小时和分钟选择两个日期的差异【英文标题】:select difference of two dates in hours and minutes 【发布时间】:2021-05-13 06:38:34 【问题描述】:

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

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 这样的事情

【问题讨论】:

你也可以manipulate the numbers of days。您的差异可以超过 24 小时吗?如果是,您希望如何证明这一点?如果没有,你可以add to a nominal date。很多选择... 【参考方案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 不支持间隔的聚合函数。因此,如果您需要此类差异的总和,则应首先应用聚合,并且仅使用此技巧将转换为间隔作为最后一步。

【讨论】:

嗨,非常感谢它的工作原理,我需要它采用这种格式 HH24:MI (01:15),我该如何转换它?使用 trunc 和 to_char 它不起作用, 那么您需要使用substrregexp_substring。与 DATE 值不同,INTERVAL 格式是固定的。 你不需要那里的乘法 (date2 - date1) DAY TO SECOND 将直接返回值作为一个区间。 有没有办法缩小这个例子的精度,只看到小时和分钟? @liviuefros - 你可以只显示小时和分钟,但你想要四舍五入还是截断(假设差异不是整数分钟数)?另外,如果结果超过 24 小时,您需要显示什么? 03 04:30(天、小时、分钟)比76:30(小时和分钟)好还是差?当然,您可以轻松地将原始差异(以天为单位)乘以 1440(每天的分钟数),四舍五入或截断为整数值,然后将这些分钟转换为小时:分钟;但为什么?意思是,这个怎么用【参考方案2】:

如果您需要特定的输出格式,除了@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, ' \d2:\d2')

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

【讨论】:

一个重要的考虑因素是四舍五入。字符串函数总是会被截断,它们不会四舍五入到最接近的整数值。

以上是关于以小时和分钟选择两个日期的差异的主要内容,如果未能解决你的问题,请参考以下文章

我如何使用 mysql 选择查询在“x 小时 y 分钟 z 秒”之类的词中获得 2 次之间的差异

在两个NSDate之间获得准确的时间差?

两个日期之间的差异(以分钟为单位)

Python中以分钟为单位的日期差异

如何计算两个日期之间的差异

element 日期组件实现只能选择小时或者只能选择小时分钟