如何获得两个日期的时差,例如 x 天 y 小时 z 秒 t 分钟 [重复]

Posted

技术标签:

【中文标题】如何获得两个日期的时差,例如 x 天 y 小时 z 秒 t 分钟 [重复]【英文标题】:How to get Time Differences of Two Dates like x days y hours z seconds t minutes [duplicate] 【发布时间】:2021-09-10 20:39:44 【问题描述】:

我正在使用 plsql,我需要获取两个日期的时差,例如 x 天 y 小时 z 秒和 t 分钟。非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

根据两个date 值的datetime arithmetic matrix 差是一个number,即天数。作为一个纯数字,它没有时间成分。所以应该用numtodsinterval函数转换成interval day to second

with a as (
  select
    sysdate as dt1,
    trunc(sysdate) as dt2
  from dual
)
select
  numtodsinterval(dt1 - dt2, 'DAY') as interval_
from a
|间隔_ | | :---------------------------- | | +000000000 22:38:59.000000000 |

db小提琴here

但是如果你有时间戳,那么根据相同的矩阵,默认情况下差异将是间隔:

with a as (
  select
    sysdate as dt1,
    trunc(sysdate) as dt2
  from dual
)
select
  numtodsinterval(dt1 - dt2, 'DAY') as interval_
from a
|间隔_ | | :---------------------------- | | +000000000 22:38:59.000000000 |

db小提琴here

请注意,to_char 函数中的时间间隔没有格式,因此要检索小时、分钟、秒,您需要使用 extract 函数

【讨论】:

您也可以使用(dt1 - dt2) DAY TO SECOND而不是使用NUMTODSINTERVAL,将数据类型显式设置为日期减法的间隔。【参考方案2】:

EXTRACT 函数可用于从间隔值表达式(即 2 个时间戳之间的差异返回的值)中获取日期时间字段。

WITH my_two_timestamps (ts1, ts2) AS
(
  SELECT 
    TO_TIMESTAMP( '2021-05-08 12:04', 'yyyy-mm-dd hh24:mi' ), 
    TO_TIMESTAMP( '2022-06-21 20:22', 'yyyy-mm-dd hh24:mi' )
   FROM DUAL
), ts_diff(diff) AS
(
  SELECT ts2 - ts1 FROM my_two_timestamps
)
  select  extract( day from diff ) days,
          extract( hour from diff ) hours,
          extract( minute from diff ) minutes,
          extract( second from diff ) seconds,
          ROUND(extract( second from diff )) + extract( minute from diff )*60 + extract( hour from diff )*60*60 + extract( day from diff )*60*60*24 total_seconds
     from ts_diff;

【讨论】:

如果我在表格的两列中有两个日期怎么办?请帮忙。 我的 cte 有 2 列。如果您需要更多详细信息,请使用可重现的示例更新您的问题。 另一个答案显示了如何从两个日期获取 INTERVAL DAY TO SECOND 类型值。您可以减去两个日期列并使用 numtodsinterval 。然后要提取天、小时、分钟、秒,您可以使用此答案中的提取语法。

以上是关于如何获得两个日期的时差,例如 x 天 y 小时 z 秒 t 分钟 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何获得两个日期之间的小时差?

我如何使用 mysql 选择查询在“x 小时 y 分钟 z 秒”之类的词中获得 2 次之间的差异

如何在 Oracle 中以 12 小时格式存储日期的 2 个日期之间的小时时差?

如何在bigquery中获得浮动或十进制的两个日期时间之间的小时差

如何获得以秒或分钟或小时为单位的时差? [复制]

在 Moment Js 中获取两个日期之间的小时差