Oracle DateAdd () из 2 разных столбцов - PullRequest
0 голосов
/ 14 марта 2012

Я пытаюсь определить эквивалент DateAdd () в Oracle, который на самом деле представляет собой разницу в секундах между двумя столбцами в одной таблице:

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 ]

1 голос
/ 14 марта 2012

В дополнение к возможности делать арифметику дат, используя доли дней, как демонстрирует Тони, предполагая, что вы используете 9i или более позднюю версию, вы также можете использовать функции интервалов (или, что еще лучше, определить столбец ROUTE_DURATION как интервал)и добавить интервалы к датам.В вашем случае вы можете сделать

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
1 голос
/ 14 марта 2012

Если я правильно вас понимаю, вы хотите добавить r.route_duration секунд к p.launch_dt? В этом случае выражение:

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

Арифметика Oracle DATE работает в днях, поэтому деления на 24, 60 и 60 преобразуют значение route_duration из секунд в дни.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...