Oracle. Арифметика дат

В Oracle как и в других системах управления базами данных с датами можно производить арифметические действия. Стоит только помнить, что сложение и вычитание с числовыми значениями происходит по-умолчанию в контексте дней. То есть выражение вида

select sysdate + 1 from dual

на выходе даст текущую дату увеличенную ровно на 1 день, поэтому, результат разницы между датами будет исчисляться днями, это и понятно - date1 + N = date2, откуда date2 - date1 = N. Складывать даты между собой запрещено, так как это не имеет смысла. Если нужны другие контексты (месяцы, года, секунды и прочее), тогда прибегают к иному способу

select sysdate ± interval '1' year from dual
select sysdate ± interval '1' month from dual
select sysdate ± interval '1' day from dual
select sysdate ± interval '1' hour from dual
select sysdate ± interval '1' minute from dual
select sysdate ± interval '1' second from dual 
  
select sysdate ± numtodsinterval(1, 'day')
select sysdate ± numtodsinterval(1, 'hour')
select sysdate ± numtodsinterval(1, 'minute') select sysdate ± numtodsinterval(1, 'second')

select sysdate ± numtoyminterval(1, 'month')
select sysdate ± numtoyminterval(1, 'year')

Но разность дат по-умолчанию возвращается в днях, это стоит помнить. Приведу небольшой пример

with
  -- first reper date
  first_date( fd ) as (
    select to_date('01.01.2014 00:00:00', 'dd.mm.yyyy hh24:mi:ss') as fd
    from dual
  ),
  -- last reper date
  last_date( ld ) as (
    select to_date('02.01.2014 00:00:00', 'dd.mm.yyyy hh24:mi:ss') as ld
    from dual
  ),
  -- get the difference of the last and the first reper dates
  get_diff_dates( diff ) as (
    select abs((select ld from last_date) - (select fd from first_date))
    from dual
  )
select
  diff days,
  diff * 24 hours,
  diff * 24 * 60 minutes,
  diff * 24 * 60 * 60 seconds
from get_diff_dates



Вообще для манипуляции с датами в Oracle есть и другие возможности, с которыми лучше всего ознакомиться самостоятельно в документации. Всем успехов.