Примеры работы с датами в Oracle
Преобразовать строку в дату
Блин, что же может быть проще?
Почему я все время забываю эту команду.
select TO_DATE('16/10/2016', 'dd/mm/yyyy') from dual;
Вычисления текущего дня, месяца и т.д. с помощью SQL
(Исправления/Уточнения/Добавления принимаются)
Текущая неделя
-- Сегодня
select trunc (SYSDATE) from dual;
-- Вчера
select trunc (SYSDATE-1) from dual;
-- Завтра
select trunc (SYSDATE+1) from dual;
-- Первый день недели
select trunc(SYSDATE, 'DAY') from dual;
-- Output: 30.05.2016
-- Последний день недели
select trunc(SYSDATE, 'DAY')+6 from dual;
-- Output: 05.06.2016
Прошедшая неделя
-- Первый день прошедшей недели
select trunc(SYSDATE, 'DAY') -7 from dual;
-- Output: 23.05.2016
-- Последний день прошедшей недели
select trunc(SYSDATE, 'DAY')-1 from dual;
-- Output: 29.05.2016
Следующая неделя
-- Первый день следующей недели
select trunc(SYSDATE, 'DAY') +7 from dual;
-- Output: 06.06.2016
-- Последний день следующей недели
select trunc(SYSDATE, 'DAY') +13 from dual;
-- Output: 12.06.2016
Текущий месяц
-- Первый день месяца
select trunc (SYSDATE, 'MM') from dual;
-- Последний день месяца
select trunc (last_day(sysdate)) from dual;
Прошедший месяц
-- Первый день прошлого месяца
select trunc(ADD_MONTHS(SYSDATE, -1), 'MM') from dual;
-- Последний день прошлого месяца
select trunc (SYSDATE, 'MM') -1 from dual;
Следующий месяц
-- Первый день следующего месяца
select trunc (last_day(sysdate)) +1 from dual;
-- Последний день следующего месяца
select trunc(LAST_DAY(ADD_MONTHS(SYSDATE, 1))) from dual;
Текущий квартал
-- Первый день квартала
select trunc (SYSDATE, 'Q') from dual;
-- Последний день квартала
select add_months(trunc(sysdate,'q'),3)-1 from dual;
Прошлый квартал
-- Первый день прошлого квартала
select trunc(add_months(sysdate,-3),'q') from dual;
-- Последний день прошлого квартала
select add_months(trunc(add_months(sysdate,-3),'q'),3)-1 from dual;
Следующий квартал
-- Первый день следующего квартала
select add_months(trunc(sysdate,'q'),3) from dual;
-- Последний день следующего квартала
select add_months(trunc(add_months(sysdate,3),'q'),3)-1 from dual;
Текущий год
-- Первый день года
select trunc (SYSDATE, 'Y') from dual;
-- Последний день года
select ADD_MONTHS(trunc (SYSDATE, 'YEAR'),12)-1 FROM DUAL;
Прошедший год
-- Первый день прошлого года
select ADD_MONTHS (trunc (SYSDATE, 'YEAR'), -12) FROM DUAL;
-- Последний день прошлого года
select ADD_MONTHS (trunc (SYSDATE, 'YEAR'), -1 ) +30 FROM DUAL;
Следующий год
-- Первый день следующего года
select ADD_MONTHS(trunc (SYSDATE, 'YEAR'),12) FROM DUAL;
-- Последний день следующего года
select ADD_MONTHS(trunc (SYSDATE, 'YEAR'),24)-1 FROM DUAL;
Нужно будет упростить вычисления, если это возможно.
Я писал на лету и сам эти вычисления не использую. Т.е. допускаю, что где-то закралась ошибка. Если что, поправлю.