sql - 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 小时
一如既往地提前感谢
解决方案
假设列已经是日期,因此您正在执行的与字符串之间的转换是没有意义的,并且差异总是小于一天,您可以这样做:
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'
,它将在开始时显示全天。
推荐阅读
- azure - 如何在 Azure 应用服务中处理长时间运行的作业?
- xpages - BeforeRenderResponse 中的 Xpages 等待消息处理
- python - 当我尝试做数学时,Python 重新启动了 shell
- javascript - 如何输出产品 ID、价格和数量的数组
- batch-file - 使用变量前缀创建文件夹的批处理文件
- gitlab - Jekyll 在 GitLab 上构建中断,捆绑程序问题
- ios - 自定义单元格类作为参数传入时不会调用 willDisplay
- ruby-on-rails - 自定义运行命令?- Azure 应用服务上的 Rails 应用
- python - 获取 python docker 容器与 redis docker 容器交互
- verilog - 子模块未在 rtl 示意图中实现