以小时和分钟选择两个日期的差异
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 它不起作用, 那么您需要使用substr
或regexp_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')
您可能需要进行一些微调才能获得正确的输出。
【讨论】:
一个重要的考虑因素是四舍五入。字符串函数总是会被截断,它们不会四舍五入到最接近的整数值。以上是关于以小时和分钟选择两个日期的差异的主要内容,如果未能解决你的问题,请参考以下文章