当日期表示为UNIX时间戳时,选择Oracle中两个日期之间的最小差异

时间:2011-09-13 09:56:14

标签: oracle

有很多关于在Oracle中获取两个日期之间差异的问题。我的问题是要求查询做更多的事情。

这是我目前的进展情况

select m_bug_t.date_submitted, m_bug_history_t.date_modified
from m_bug_t, m_bug_history_t
where m_bug_t.id = m_bug_history_t.bug_id
and field_name = 'status'
and new_value = '100'

到目前为止,我得到了一组像这样返回的日期对

date_submitted | date_modified
1314894774     | 1315906468
...
...

我想将这些数字转换为日期,找到它们之间的差异,然后得到所有结果的最小值。我希望将差异表示为天。

你有什么想法吗?

非常感谢:)。

2 个答案:

答案 0 :(得分:3)

嗯,Unix时间戳表示为自1970年1月1日以来的秒数,因此如果从另一个中减去一个,则得到秒数的差异。然后,天数的差异就是除以一天中的秒数:

(date_modified - date_submitted) / (24*60*60)

(date_modified - date_submitted) / 86400

答案 1 :(得分:1)

要将UNIX时间转换为可以使用的日期:

DATE '1970-01-01' + numtodsinterval(:unix_time_stamp, 'second')

在SQL中,当你减去两个日期时,你会得到几天的差异,所以你可以写:

SELECT MIN(dt_mod - dt_sub)
  FROM (SELECT DATE '1970-01-01' 
               + numtodsinterval(m_bug_t.date_submitted, 'second') dt_sub,
                DATE '1970-01-01' 
                + numtodsinterval(m_bug_history_t.date_modified, 'second') dt_mod
           FROM m_bug_t, m_bug_history_t
          WHERE m_bug_t.id = m_bug_history_t.bug_id
            AND field_name = 'status'
            AND new_value = '100')

当然,正如其他人建议您不需要进行此DATE转换,您可以减去2个时间戳(以秒为单位的差异)并将结果转换为天数。