有很多关于在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
...
...
我想将这些数字转换为日期,找到它们之间的差异,然后得到所有结果的最小值。我希望将差异表示为天。
你有什么想法吗?
非常感谢:)。
答案 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个时间戳(以秒为单位的差异)并将结果转换为天数。