首页 > 解决方案 > Oracle SQL 小时 HH:MM:SS 中的日期之间的差异

问题描述

我已经有一个字符串来计算我从堆栈中获得的两个日期之间的小时差:

24 *  (to_date(to_char(stp.created_date,'YYYY-MM-DD hh24:mi:ss'),'YYYY-MM-DD hh24:mi:ss') -
(to_date(to_char(adhh.created_date,'YYYY-MM-DD hh24:mi:ss'),'YYYY-MM-DD hh24:mi:ss'))) diff_hours

但我想将此视为 HH:MM:SS

这里以 2 个日期/时间为例: STP 日期 26-Feb-18 12.59.21 ADHH 日期 26-Feb-18 12.59.32

所以我想说区别是 00:00:11(11 秒)

目前我得到的结果为 -0.003 小时

一如既往地提前感谢

标签: sqloracledate-difference

解决方案


假设列已经是日期,因此您正在执行的与字符串之间的转换是没有意义的,并且差异总是小于一天,您可以这样做:

to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')

这将日期之间的差异作为一天的一小部分;确保它是积极的abs();然后将该分数加回到标称日期,该标称日期的时间为午夜。然后它将其转换为字符串,仅查看时间。

快速演示:

-- CTEs to supply the two date/times
with stp (created_date) as (
  select cast(timestamp '2018-02-26 12:59:21' as date) from dual
),
adhh (created_date) as (
  select cast(timestamp '2018-02-26 12:59:32' as date) from dual
)
select to_char(date '1970-01-01' + abs(stp.created_date - adhh.created_date), 'HH24:MI:SS')
from stp cross join adhh;

TO_CHAR(
--------
00:00:11

如果差异可以超过一天,但不能超过一年,您可以将格式模型更改为类似'FMDDD FMHH24:MI:SS',它将在开始时显示全天。


推荐阅读