Читать книгу Основы программирования в СУБД Oracle. SQL+PL/SQL. - О. А. Ткачев - Страница 17

ЧАСТЬ 2. SQL – ЯЗЫК СТРУКТУРИРОВАННЫХ ЗАПРОСОВ
Глава 3. Типы данных и встроенные функции
Типы даты и времени

Оглавление

Эти типы используются для работы с данными, представляющими собой даты с учетом времени. Тип Date является основным при работе с данными, представляющими собой дату и время. При использовании этого типа данные хранятся в формате DD-MM-YY HH: MI: SS, где:

DD – двузначное значение дня;

MM – двузначный номер месяца;

YY – две последние цифры года;

HH, MI, SS – двузначные значения часа, минуты и секунды.

При выводе значений данного типа по умолчанию отображается дата. Для получения текущей даты в формате Date используется функция SYSDATE.


Пример 3.19. Вывод текущей даты в формате по умолчанию


SELECT SYSDATE

FROM Dual;


Для отображения и обработки полного значения, содержащего время, используются специальные функции.

Пример 3.20. Вывод текущей даты с использованием функции TO_CHAR


SELECT TO_CHAR (SYSDATE, ′DD MONTH YYYY, HH24:MI: SS′)

As Date_Time

FROM Dual;


К типам данных, используемых для представления значений даты и времени, также относятся:

– TIMESTAMP – аналогичен типу Date, но время хранится с точностью до миллиардной доли секунды. Для получения текущей даты в этом формате используется функция LOCALTIMESTAMP;

– TIMESTAMP WITH TIME ZONE – хранит вместе со значением даты и времени информацию о часовом поясе. Часовым поясом называется смещение от времени по Гринвичу. Для получения текущей даты в этом формате используется функция SYSTIMESTAMP.


Пример 3.21. Использование функция LOCALTIMESTAMP


SELECT LOCALTIMESTAMP

FROM DUAL;


Пример 3.22. Использование функция SYSTIMESTAMP


SELECT SYSTIMESTAMP

FROM DUAL;


Функции для работы с данными, имеющими тип даты и времени


Для обработки данных, имеющих тип Date, можно использовать функции, представленные в таблице 3.4.


Таблица 3.4. Функции для работы с данными, имеющими тип даты и времени


Значения, имеющие этот тип, могут участвовать в арифметических операциях с некоторыми ограничениями. Например, разница меду двумя датами равна количеству дней, прошедших между этими датами, но нельзя непосредственно складывать значения, имеющие тип Date.

Прибавление целого значения n к значению типа Date эквивалентно прибавлению n дней к дате. Прибавление значения n/24 к значению типа Date эквивалентно прибавлению n часов к дате.

Если в выражении участвует строка, содержащая значение даты, то ее рекомендуется преобразовать к значению типа Date, используя функцию TO_DATE ().

Рассмотрим примеры, в которых значения, имеющие тип Date, участвуют в арифметических выражениях.


Пример 3.23. Вывод значения текущей даты, увеличенного на 45 дней


SELECT SYSDATE, SYSDATE +45

FROM DUAL;


Пример 3.24. Вывод значения текущей даты и времени, увеличенного на два часа


SELECT TO_CHAR (SYSDATE, ′DD MONTH YYYY, HH24:MI: SS′)

As Date1,

TO_CHAR (SYSDATE +2/24, ′DD MONTH YYYY, HH24:MI: SS′)

As Date2

FROM DUAL;


Пример 3.25. Определить количество дней, прошедших между датой приема на работу и сегодняшним днем


SELECT employee_id, ROUND (SYSDATE – hire_date AS DAYS, -2)

FROM Employees;


Следует обратить внимание на то, что этот запрос возвращает дробное значение, так как значение, возвращаемое функцией SYSDATE, содержит текущее время, которое трактуется как часть суток: например, 12 часов отобразятся в виде значения 0,5.


Пример 3.26. Определить количество недель, прошедших между датой приема на работу и сегодняшним днем


SELECT employee_id, TRUNC ((SYSDATE – hire_date) /7)

AS WEEKS

FROM Employees;


Для определения интервалов между двумя датами в месяцах следует использовать специальную функцию MONTHS_BETWEEN.


Пример 3.27. Вывести данные о сотрудниках и количестве месяцев, прошедших между датой приема на работу и сегодняшним днем


SELECT employee_id, first_name, last_name,

department_id, hire_date,

TRUNC (MONTHS_BETWEEN (SYSDATE, hire_date)) AS MONTHS

– —

FROM Employees;


Пример 3.28. Вывести данные о сотрудниках, которые проработали более 30 лет


SELECT employee_id, first_name, last_name, salary,

department_id, hire_date

FROM Employees

WHERE MONTHS_BETWEEN (SYSDATE, hire_date)> 360;


Функция NEXT_DAY (x, день недели) возвращает следующую ближайшую дату, соответствующую определенному дню недели: например, среда.


Пример 3.29. Использование функции NEXT_DAY


SELECT SYSDATE AS «Сегодня», EXT_DAY (SYSDATE, ′Tuesday′)

AS Tuesday

FROM DUAL;


Функция LAST_DAY (x) возвращает дату, соответствующую последнему дню месяца, которому принадлежит x.


Пример 3.30. Использование функции LAST_DAY


SELECT SYSDATE, LAST_DAY (SYSDATE)

FROM DUAL;


Функция ROUND (x, {параметр}) округляет дату x, если параметр отсутствует, то до начала ближайших суток; если {параметр} = MM/ MON / MONTH – то до начала ближайшего месяца; если параметр = YY / YYYY /YEAR – то до начала ближайшего года.

Пример 3.31. Использование функции ROUND c параметром MM


SELECT ROUND (TO_DATE (′12.05.2018′, ′DD.MM.YYYY′),′MM′)

As ′′ ROUND MONTCH 12.05.2018 ′′,

ROUND (TO_DATE (′20.05.2018′, ′DD.MM.YYYY′),′MM′)

As ′′ ROUND MONTCH 20.05.2018 ′′

FROM DUAL;


Пример 3.32. Использование функции ROUND c параметром YYYY


SELECT ROUND (TO_DATE (′12.05.2018′, ′DD.MM.YYYY′),′YYYY′)

As ′′ ROUND YEAR 12.05.2018 ′′,

ROUND(TO_DATE(′12.07.2018′,′DD.MM.YYYY′),′YYYY′)

As ′′ ROUND YEAR 12.07.2018 ′′

FROM Dual;


Функция TRUNC (x, {параметр}) отличается от ROUND тем, что возвращает начало текущих суток, начало текущего месяца, начало текущего года соответственно.


Пример 3.33. Использование функции TRUNC c параметром MM.


SELECT TRUNC (TO_DATE (′12.05.2018′, ′D.MM.YYYY′),′MM′)

As ′′ TRUNC MONTCH 12.05.2018 ′′,

TRUNC (TO_DATE (′20.05.2018′, ′D.MM.YYYY′),′MM′)

As ′′ TRUNC MONTCH 20.05.2018 ′′

FROM DUAL;


Функция EXTRACT


Функция EXTRACT возвращает значение заданного поля даты-времени из значения, имеющего тип date. Синтаксис:


EXTRACT ({часть даты} FROM {дата})


Таблица 3.5. Часть даты, возвращаемая функцией EXTRACT


Пример 3.34. Вывести данные о сотрудниках, которые были приняты на работу в 1999 году


SELECT employee_id, first_name, last_name, department_id, hire_date

FROM Employees

WHERE EXTRACT (YEAR FROM hire_date) =1999;


Основы программирования в СУБД Oracle. SQL+PL/SQL.

Подняться наверх