如何获得两个日期的时差,例如 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
:
|间隔_ | | :---------------------------- | | +000000000 22:38:59.000000000 |with a as ( select sysdate as dt1, trunc(sysdate) as dt2 from dual ) select numtodsinterval(dt1 - dt2, 'DAY') as interval_ from a
db小提琴here
但是如果你有时间戳,那么根据相同的矩阵,默认情况下差异将是间隔:
|间隔_ | | :---------------------------- | | +000000000 22:38:59.000000000 |with a as ( select sysdate as dt1, trunc(sysdate) as dt2 from dual ) select numtodsinterval(dt1 - dt2, 'DAY') as interval_ from a
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 个日期之间的小时时差?