11 апреля 2011 г.

oracle: работа с датой

1. Системная дата
select sysdate from dual;

2. Текущая дата в сессии
select current_date from dual;

3. Какая дата будет завтра или через несколько дней, месяцев
-- завтра
select sysdate + 1 from dual;

-- через 10 дней
select sysdate + 10 from dual;

-- 30 дней назад
select sysdate -30 from dual;

-- через 2 месяца
SELECT add_months(SYSDATE, 2) FROM dual;

-- в ближайший четверг
select NEXT_DAY(TRUNC(SYSDATE), 'THURSDAY') from dual;

4. Последний рабочий день месяца
select last_day(sysdate) -
case trim(to_char(last_day(sysdate), 'DAY', 'NLS_DATE_LANGUAGE=ENGLISH'))
           when 'SUNDAY' then 2
           when 'SATURDAY' then 1
           else 0
         end
  from dual;

5. Вывести текущую дату со временем 00:00:00

 SELECT TO_CHAR(TRUNC(SYSDATE, 'DD'), 'DD-MON-YYYY HH24:MI:SS') "date" FROM dual;

date
--------------------
01-JUL-2010 00:00:00

6. Получить дату завтра  и время 2 часа ночи
select trunc(sysdate)+1+2/24 from dual;

7. Какой день недели попадает за заданную дату

SELECT TO_CHAR (TO_DATE ('14.07.2011', 'dd.mm.yyyy'), 'd')
  FROM DUAL;

Какой день недели считать первым зависит от параметра NLS_TERRITORY.


8. Какая дата первого дня недели

SELECT TRUNC (TO_DATE ('14.07.2011', 'dd.mm.yyyy'), 'D')
  FROM DUAL;


9. Переформатировать дату с формата dd.mm.yyyy на yyyy/mm/dd

SELECT TO_CHAR(TO_DATE('01.06.2012','dd.mm.yyyy'),'yyyy/mm/dd') FROM dual;