【问题标题】:Date Time differences calculation in Oracle [duplicate]Oracle中的日期时间差异计算[重复]
【发布时间】:2013-10-09 16:11:34
【问题描述】:

我有一种情况需要获取两列之间的差异。

第 1 栏:01-OCT-13 10:27:15
第2栏:01-OCT-13 10:28:00

我需要了解上述两列之间的差异。我尝试使用“-”运算符,但输出不是预期的方式。
我需要如下输出:00-00-00 00:00:45

【问题讨论】:

  • 时间怎么可能是10:27:60?那将是10:28:00(每分钟 60 秒)。这些是DATE 列吗(在这种情况下,尾随的 60 无效)?或者它们是timestamp 列(在这种情况下,尾随的 60 可能旨在表示小数秒,而您只是错过了整数秒数)?
  • 哦对不起...我的错误.. :)
  • 列的类型为 DATE

标签: sql oracle


【解决方案1】:

试试这个查询,但它没有经过测试

SELECT extract(DAY
               FROM diff) days,
       extract(hour
               FROM diff) hours,
       extract(MINUTE
               FROM diff) minutes,
       extract(SECOND
               FROM diff) seconds,
       extract(YEAR
               FROM diff) years
FROM
  (SELECT (CAST (to_date(t.column1, 'yyyy-mm-dd hh:mi:ss') AS TIMESTAMP) -CAST (to_date(t.column2, 'yyyy-mm-dd hh:mi:ss') AS TIMESTAMP)) diff
   FROM tablename AS t)

【讨论】:

  • 但这只是秒差吧..!?如果日期以及小时和分钟也有差异怎么办?
  • 是的,它工作正常。我可以在一个查询中提取所有内容吗?
  • 是的,它的工作非常感谢你..如果我也想找到月份和年份的差异,我是否应该遵循相同的程序
  • @user2037445 我现在更新了查询,签出,删除一些 cmets 或者让我们开始聊天
  • 是的,即使现在它也出现同样的错误
【解决方案2】:

也试试这个,

WITH T(DATE1, DATE2) AS
(
SELECT TO_DATE('01-OCT-13 10:27:15', 'DD-MON-YY HH24:MI:SS'),TO_DATE('01-OCT-13 10:28:00', 'DD-MON-YY HH24:MI:SS') FROM DUAL
)
SELECT floor(date2 - date1)
          || ' DAYS '
          || MOD(FLOOR ((date2 - date1) * 24), 24)
          || ' HOURS '
          || MOD (FLOOR ((date2 - date1) * 24 * 60), 60)
          || ' MINUTES '
          || MOD (FLOOR ((date2 - date1) * 24 * 60 * 60), 60)
          || ' SECS ' time_difference

FROM T;

【讨论】:

  • 另一种从两个日期中提取日、小时、分钟和秒的方法。
【解决方案3】:

您可以使用以下查询来查找差异seconds

select 24*60*60*
(to_date('01-OCT-13 10:28:00', 'yyyy-mm-dd hh24:mi:ss')-
to_date('01-OCT-13 10:27:15', 'yyyy-mm-dd hh24:mi:ss')) diff_secs
from dual;

SQL Fiddle

【讨论】:

  • 但我还需要日期之间的差异,包括天、月、年、小时、分钟、秒
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
  • 2011-07-18
  • 2017-11-16
相关资源
最近更新 更多