Oracle DateAdd()包含2个不同的列

时间:2012-03-14 13:53:40

标签: oracle

我试图找出Oracle中的DateAdd()等价物,实际上是同一个表中2列之间的秒数差异:

SELECT
    DISTINCT p.packet_id,
    p.launch_dt,
    r.route_duration,
    s.completion_date,
    DATEADD(SS, r.route_duration, p.launch_dt) AS tempDate
FROM 
    tdc_arc_apprpkt_def p
    JOIN tdc_arc_inpr_route_def r
        ON p.packet_id = r.packet_id
    JOIN tdc_arc_inpr_route_step_detai s
        ON p.packet_id = s.packet_id
        AND s.completion_date > DATEADD(SS, r.route_duration, p.launch_dt)

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您想将r.route_duration秒添加到p.launch_dt?在这种情况下,表达式为:

p.launch_dt + (r.route_duration/24/60/60)

Oracle DATE算法在几天内工作,因此24,60和60的除法将route_duration值从秒转换为几天。

答案 1 :(得分:1)

除了能够使用Tony演示的几天内进行日期算术,假设您使用9i或更高版本,您还可以使用区间函数(或者更好的是,将ROUTE_DURATION列定义为interval)并为日期添加间隔。在你的情况下,你可以做

p.launch_dt + numtodsinterval( r.route_duration, 'SECOND' ) 

route_duration秒添加到launch_dt

如果您要将route_duration列定义为INTERVAL DAY TO SECOND而不是NUMBER,则只需将其添加到日期

p.launch_dt + r.route_duration