Oracle - 获取两个 DateTime 列之间的分钟差的最佳 SELECT 语句是什么?

24

我正在尝试满足客户的一个非常困难的报告请求,需要找到一种方法来获取两个DateTime列之间的分钟差异。我曾经尝试使用各种格式的trunc和round,但似乎无法找到合适的组合。是否有一种简洁的方法?如果没有,有没有任何方法可以实现这一点?

4个回答

53
SELECT date1 - date2
  FROM some_table

返回一个天数差异。将其乘以24可得到小时差异,将24*60乘以分钟差异。因此

SELECT (date1 - date2) * 24 * 60 difference_in_minutes
  FROM some_table

应该是你正在寻找的内容。


5
我之前不知道日期相减会返回天数,现在我明白了。 - Powerlord
2
不要忘记对结果进行四舍五入!你会想要使用ROUND((date1 - date2) * 1440,0)函数。 - 37Stars
1
@KanagaveluSugumar - Oracle的DATE类型始终包含年、月、日、小时、分钟和秒组件。相减两个日期只有在它们是同一年、同一月、同一天、同一小时、同一分钟和同一秒时才会返回结果。如果它们精确到秒完全相同,那么返回0应该是正确的答案。 - Justin Cave
@Justin Cave 点赞了!但是如何在同一天内使用两个不同的时间获取 difference_in_minutes 仍然不清楚?因为(date1 - date2)= 0 对于同一天。因此,(date1 - date2)* 24 * 60 将为零??我认为;它将为少于一天的浮点值提供浮点值??我正确吗? - Kanagavelu Sugumar
3
@KanagaveluSugumar - 不,你的说法不正确。如果date1date2精确到秒完全相同,那么它们相减的结果将等于0。如果date1date2处于同一天但时间不同,它们相减的结果将返回一个大于0但小于1的数字。将其乘以24 * 60将得到分钟差异。 - Justin Cave
显示剩余3条评论

12

默认情况下,Oracle日期相减返回的结果是天数。

因此,只需将其乘以24即可获得小时数,再乘以60即可获得分钟数。

示例:

select
  round((second_date - first_date) * (60 * 24),2) as time_in_minutes
from
  (
  select
    to_date('01/01/2008 01:30:00 PM','mm/dd/yyyy hh:mi:ss am') as first_date
   ,to_date('01/06/2008 01:35:00 PM','mm/dd/yyyy HH:MI:SS AM') as second_date
  from
    dual
  ) test_data

3

两个链接现在已经失效。 - Amanda R.

0

where子句中使用timestampdiff

例如:

Select * from tavle1,table2 where timestampdiff(mi,col1,col2).

1
在Oracle SQL中没有timestampdiff这样的函数。 - AgentFire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接