Интервалы времени в Oracle SQL

Статьи про Oracle -> Программирование

Интервалы времени в Oracle SQL

v:1.0 27.07.2014
Петрелевич Сергей

Периодически при написании sql-запросов в Oracle надо из заданного времени, например текущего, вычесть какое-то количество секунд.
Это можно сделать несколькими способами.

Например, так.

sysdate-10*1/24/60/60
Из системной даты вычитаются 10 секунд.
Делается этот так: sysdate-1 ----вычитаем 1 день
1/24/60/60 --день переводим в часы, часы в минуты, а минуты в секунды.
Результат умножаем на 10, чтобы получить 10 секунд.

Есть способ красивее

sysdate-INTERVAL '10' SECOND
В этом способе используется системный литерал Oracle: INTERVAL.

И полный пример.

select to_char(sysdate,'dd.mm.yyyy hh24:mi:ss') as now,
       to_char(sysdate-10*1/24/60/60,'dd.mm.yyyy hh24:mi:ss') as before_1,
       to_char(sysdate-INTERVAL '10' SECOND,'dd.mm.yyyy hh24:mi:ss') as before_2
from dual 

P.S.
Вот еще несколько примеров применения .

select to_char(sysdate,'dd.mm.yyyy hh24:mi:ss') as now,

  to_char(sysdate+INTERVAL '1:2' MINUTE TO SECOND,'dd.mm.yyyy hh24:mi:ss') as addTime,   --добавляем часы и минуты
  to_char(sysdate+INTERVAL '10' MINUTE,'dd.mm.yyyy hh24:mi:ss')            as addMinutes,--добавляем минуты
  to_char(sysdate+INTERVAL '2' HOUR ,'dd.mm.yyyy hh24:mi:ss')              as addHour,   --добавляем часы
  to_char(sysdate+INTERVAL '4' DAY,'dd.mm.yyyy hh24:mi:ss')                as addDay     --добавляем дни
from dual    

Метки: SQL  

Комментарии.

Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.

jashka34 28.10.2014 17:40:51
Кстати, а более красивый способ чем получать дату первого дня месяца так вот: select ((last_day(sysdate) + 1) - interval '1' month) from dual есть? :)
 
Sergey 28.10.2014 20:10:28
я бы предложил такой способ: select 1 as first from dual
 
igorDem 21.11.2014 18:48:37
А чем trunc(sysdate,'MM') не устраивает?
 
Sergey 22.11.2014 15:55:35
trunc(sysdate,'MM') - нормальное решение.
jashka34 предложил, на мой взгляд, очень остроумный вариант. :)