Операции над значениями типа DATE

Над значениями типа DATE разрешены следующие операции:

  1. бинарная операция сложения;

  2. бинарная операция вычитания.

В бинарных операциях один из операндов должен иметь значение не полной даты, а отдельного элемента значения даты: только год, или месяц, или день и т.д. Например, при добавлении к дате '22.05.1998' 5 лет получится дата '22.05.2003'; при добавлении 9 месяцев получится дата '22.02.1998'; при добавлении 10 дней получится дата '01.06.1998'. При сложении двух полных дат, например, '22.05.1998' и '01.12.2000', результат будет непредсказуем.

Если к значению типа DATE добавляется (вычитается) просто число (без указания формата), то это число принимается за количество дней.

Значение лет (без указания дней, часов, минут, секунд и т.п.) из 2 цифр воспринимается как относительное (т.е. месяцы остаются без изменений, дни ставятся в 0), из 4 цифр – как абсолютное (т.е. дни и месяцы, если их нет, ставятся в 1). Сравните:

select to_date('03.02.2011', 'DD.MM.YYYY') - to_date('05','yy');
|03.02.2006:00:00:00.00|

select to_date('03.02.2011', 'DD.MM.YYYY') - to_date('0005','yyyy');
|02.02.2007:00:00:00.00|

Элементы конструкций могут быть заданы < SQL-параметром >, который должен содержать спецификацию типа данных параметра, например,

select ? (date) - to_date(? (char(2)),'yy');
16.03.2015
05
|16.03.2010:00:00:00.00|
Примеры
select sysdate + to_date('05','yy') from person;
select sysdate;
|27.03.2003:15:33:42.00 |
select sysdate+3;
|30.03.2003:15:34:40.00 |
select sysdate+4.56;
|01.04.2003:05:01:40.00 |
select to_date('15.10.2007 10:20','DD.MM.YYYY HH:MI') + 1.1e0;
|16.10.2007:12:44:00.00|