Oracle Database
Работа с датами
Поиск…
Арифметика даты
Oracle поддерживает DATE
(включая время до ближайшей секунды) и TIMESTAMP
(включая время до долей секунды) типов данных, которые позволяют арифметически (сложение и вычитание) изначально. Например:
Чтобы получить следующий день:
select to_char(sysdate + 1, 'YYYY-MM-DD') as tomorrow from dual;
Чтобы получить предыдущий день:
select to_char(sysdate - 1, 'YYYY-MM-DD') as yesterday from dual;
Чтобы добавить 5 дней к текущей дате:
select to_char(sysdate + 5, 'YYYY-MM-DD') as five_days_from_now from dual;
Чтобы добавить 5 часов к текущей дате:
select to_char(sysdate + (5/24), 'YYYY-MM-DD HH24:MI:SS') as five_hours_from_now from dual;
Чтобы добавить 10 минут к текущей дате:
select to_char(sysdate + (10/1440), 'YYYY-MM-DD HH24:MI:SS') as ten_mintues_from_now from dual;
Чтобы добавить 7 секунд к текущей дате:
select to_char(sysdate + (7/86400), 'YYYY-MM-DD HH24:MI:SS') as seven_seconds_from_now from dual;
Чтобы выбрать строки, где hire_date
- 30 дней назад или более:
select * from emp where hire_date < sysdate - 30;
Чтобы выбрать строки, где last_updated
столбец находится в последний час:
select * from logfile where last_updated >= sysdate - (1/24);
Oracle также предоставляет встроенный тип данных INTERVAL
который представляет собой продолжительность времени (например, 1,5 дня, 36 часов, 2 месяца и т. Д.). Они также могут использоваться с арифметикой с выражениями DATE
и TIMESTAMP
. Например:
select * from logfile where last_updated >= sysdate - interval '1' hour;
Функция Add_months
Синтаксис: add_months(p_date, integer) return date;
Функция Add_months добавляет несколько месяцев к дате p_date.
SELECT add_months(date'2015-01-12', 2) m FROM dual;
M |
---|
2015-03-12 |
Вы также можете вычитать месяцы, используя отрицательный amt
SELECT add_months(date'2015-01-12', -2) m FROM dual;
M |
---|
2014-11-12 |
Когда расчетный месяц имеет меньше дней в качестве заданной даты, будет возвращен последний день расчетного месяца.
SELECT to_char( add_months(date'2015-01-31', 1),'YYYY-MM-DD') m FROM dual;
M |
---|
2015-02-28 |