我有一个表格,其中包含日期格式的一列。我想计算两个记录之间的时差,你能帮帮我吗?我需要SQL或PL / SQL中的查询。
ORDER_ID;ORDER_STATUS_ID;ORDER_DATE
8296;16;22-2-2011 13:56:31
8295;22;22-2-2011 13:07:15
查询应该在00:49:45或接近此结果。
你能帮忙吗? THX!BR
答案 0 :(得分:2)
问题并不是你想要如何计算它 - 它是你想要它的显示方式。日期算术很简单:
select date2 - date1 from
(select to_Date('22-2-2011 13:07:15','dd-mm-yyyy hh24:mi:ss') as date1,
to_Date('22-2-2011 13:56:31','dd-mm-yyyy hh24:mi:ss') as date2
from dual);
给出答案,但它是小数。那么如何将其转换为您的视觉显示?
select to_char(trunc(sysdate) + mod(date2 - date1,1),'hh24:mi:ss') from
(select to_Date('22-2-2011 13:07:15','dd-mm-yyyy hh24:mi:ss') as date1,
to_Date('22-2-2011 13:56:31','dd-mm-yyyy hh24:mi:ss') as date2
from dual);
好的,现在格式很好。
哦,除非你真的想存储间隔怎么办?或者,如果间隔超过一天,则需要以不同方式对其进行格式化。
那么 - 您是否需要实际间隔用于其他目的?或者您只想以给定格式显示间隔?根据您的需要,将指导您的答案。
但间隔本身很容易。那只是减法。在你的情况下
select yt2.order_Date - yt1.order_date
from yourtable yt1, yourtable yt2
where yt1.order_id = 8295
and yt2.order_id = 8296;
答案 1 :(得分:2)
您可能会发现分析函数很有帮助。
SELECT order_id,
order_date,
order_date - LAG(order_date) OVER (ORDER BY order_id) time_since_last_order
FROM order_table
WHERE order_id IN (8295,8296) -- or whatever set of orders you're really interested in
ORDER BY order_id;
这样可以避免连接两行所需的自连接。
除此之外,迈克尔的回答也很好。
答案 2 :(得分:0)
结帐this site。根据您使用的是DATE
还是TIMESTAMP
字段,您需要编写的查询会有所不同。
如果这是一项重要功能,并且您希望降低创建查询的难度,则可以考虑切换到TIMESTAMP
字段,如果可能的话。