【问题标题】:How to calculate exact hours between two datetime fields?如何计算两个日期时间字段之间的确切时间?
【发布时间】:2021-11-20 16:26:52
【问题描述】:

我需要计算日期时间字段之间的小时数,我可以通过简单的操作来实现

select date1,date2,(date1-date2) from table; --This gives answer in DD:HH:MM:SS format
select date1,date2,(trunc(date1)-trunc(date2))*24 --This doesn't take into account the time, it only gives hours between two dates.

有没有办法可以找到日期时间之间的差异,以小时为单位的输出?

【问题讨论】:

  • 'datetime' 不是 Oracle 数据类型;列日期或时间戳?从第一个代码注释我猜是后者。不过,示例数据和预期结果会很有用 - 我不太清楚你所说的“确切时间”是什么意思 - 完整的整个时间,或包括分数等?

标签: sql date datetime oracle-sqldeveloper difference


【解决方案1】:

您的第一个查询的“格式”注释表明您的列是时间戳,尽管列名是虚拟的,因为减去两个时间戳的结果是一个间隔。您的第二个查询将两个时间戳隐式转换为日期,然后再减去它们以获得作为天数的答案 - 如果您不截断它们并因此丢失时间部分,这将是分数。

您可以从间隔差异中提取小时数,如果您希望超过一天,还可以提取 24 * 天数:

extract(day from (date1 - date2)) * 24 + extract(hour from (date1 - date2))

如果您想包含小数小时,那么您也可以提取和操作分钟和秒。

您还可以显式转换为日期,并在操作后截断或下限:

floor((cast(date1 as date) - cast(date2 as date)) * 24)

db<>fiddle demo

【讨论】:

  • 您好,感谢您的解决方案。出于某种原因, extract(hour from (date1 - date2)) 总是给我零。结果,输出仅为 extract(day from (date1 - date2)) * 24。我在数据中看到的日期格式如下:11-JAN-21 12.23.00.000000000 PM
  • 查看date1 - date2 给出的时间间隔,看看显示的天数和小时数。我们无法从单个时间戳值中看出太多。正如我之前所说,在您的问题中添加示例数据和预期结果会很有帮助。
  • 此解决方案有效。团队提供的日期字段不正确。非常感谢!
【解决方案2】:

您可以使用日期的差异并乘以 24 来找到它

 select date1
       ,date2
       ,(date1-date2)*24  as diff_in_hrs
  from table

【讨论】:

    【解决方案3】:

    在sql中使用DATEDIFF函数。

    示例: SELECT DATEDIFF(HOUR, '2021-09-05 12:00:00', GETDATE());

    【讨论】:

    • 感谢您的回答。我使用的是 Oracle SQL,而 Datediff 不是 Oracle 支持的函数。
    猜你喜欢
    • 2017-10-29
    • 1970-01-01
    • 2012-01-31
    • 2014-09-24
    • 2020-06-28
    • 2020-05-15
    • 1970-01-01
    • 2010-09-17
    • 2014-06-30
    相关资源
    最近更新 更多