Читать в оригинале

<< ПредыдущаяОглавление


5.8 Функции работы с датой и временем

В данном разделе речь пойдет о функциях работы с датой/временем и функциями преобразования типов для даты. Для хранения даты и вре­мени в Oracle предусмотрен специальный тип DATE. С физической точки зрения это дробное число, целая часть которого хранит количество дней с некоторой базовой даты, а дробная — время. Это позволяет совершать над датами арифметические операции — сложение и вычитание.

Функция SYSDATE

Это одна из самых часто употребляемых функций, она возвращает те­кущую дату и время по часам сервера. Пример:

SELECT SYSDATE
FROM dual

SYSDATE
26.12.2007 16:24:43

Функция ADD_MONTHS(d, x)

Возвращает дату, полученную в результате прибавления к дате d од­ного или нескольких месяцев. Количество месяцев задается параметров х, причем х может быть отрицательным — в этом случае указанное количе­ство месяцев вычитается из заданной даты.

Пример:

SELECT SYSDATE d,
ADD_MONTHS(SYSDATE, 3) d1, ADD_MONTHS(SYSDATE, -3) d2
FROM dual

D

Dl

D2

26.12.2007 16:24:43

26.03.2008 16:24:43

26.09.2007 16:24:43

Функция LAST _DAY(d)

Возвращает последнее число месяца, указанного в дате d. Пример:

SELECT SYSDATE d,
LAST_DAY(SYSDATE) d1
FROM dual

D

D1

26.12.2007 16:24:43

31.12.2008 16:24:43

Данная функция очень удобна для определения количества дней в за­данном месяце, например:

SELECT SYSDATE d,
TO_CHAR(LAST_DAY(SYSDATE), 'DD') d1
FROM dual

D

D1

26.12.2007 16:24:43

31

Функция MONTHS_BETWEEN(dl, d2)

Функция MONTH_BETWEEN возвращает количество месяцев между двумя датами dl и d2 с учетом знака как dl-d2, возвращаемое число яв­ляется дробным.

SELECT MONTHS_BETWEEN('2.09.2006', '2.05.2006') d1,
M0NTHS_BETWEEN('12.09.2006', '2.05.2006') d2,
M0NTHS_BETWEEN('2.05.2006', '12.09.2006') d3
FROM dual

Dl

D2

D3

4

4,32258064516129

-4,32258064516129

Функция TRUN С (d[,mask ])

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

Пример:

SELECT SYSDATE d1,
TRUNC(SYSDATE) d2
FROM dual

Dl

D2

26.09.2006 16:45:26

26.09.2006

Рассмотрим типовые примеры — усечение даты до часов, дней, месяца и года. Форматная маска по умолчанию равна «DD»

SELECT SYSDATE dl,
TRUNC(SYSDATE, 'HH24')          d2,
TRUNC(SYSDATE, 'DD')   d3,
TRUNC(SYSDATE, 'MM') d4,
TRUNC(SYSDATE, 'YYYY') d5
FROM dual

Dl

D2

D3 D4 D5

26.09.2006 16:49:21

26.09.2006 16:00:00

26.09.2006 01.09.2006 01.01.2006

Функция ROUND(d[,mask])

Функция ROUND аналогична TRUNC, но вместо усечения она произ­водит округление. Форматная маска по умолчанию равна «DD». Пример:

SELECT SYSDATE d1,
ROUND(SYSDATE) d2,
ROUND(SYSDATE, 'НН24')     d3,
ROUND(SYSDATE, ' DD')      d4,
ROUND(SYSDATE,   'MM') d5
FROM dual

D1

D2 D3

D4 D5

26.09.2006 16:50:50

27.09.2006 26.09.2006 17:00:00

27.09.2006 01.10.2006

Форматные маски, допустимые для функций TRUNC и ROUND

Рассмотрим подробнее форматные маски и особенности их применения:

Маска

Назначение

 

СС

Первый день столетия

 

YEAR, или YYYY,

Первый день года

 

или YY, или Y

 

 

Q

Первый день квартала

 

MONTH, или MON,

Первый день месяца

 

или ММ

 

 

WW

Тот же день недели, что день текущего года

и первый

W

Тот же день недели, что день текущего месяца

и первый

DDD или DD

День

 

DAY, или DY, или D

Первый день недели

 

НН, или НН12, или

Час

 

НН24

 

 

Ml

Минута

 

Функция TO_DATE(str[,mask [,nls_lang]])

Функция ТО_DATE преобразует строку str в дату. Преобразование ве­дется по маске mask, если она указана. Если маска не указана, то берется маска по умолчанию. В случае указания маски можно указать еще один параметр — язык, используемый при форматировании названий месяцев и дней. В случае ошибки анализа строки str в соответствии с заданной

маской возникает исключительная ситуация. Наиболее распространенная ошибка «ORA-01830: шаблон формата даты завершается перед преобра­зованием всей строки ввода». Кроме того, нередко встречается ошибка «ORA-01821: формат даты не распознан» — она возникает при указании недопустимой форматной маски. Пример:

SELECT T0_DATE('12.09.2006') d
FROM dual

Функция TO_CHAR(d[,mask])

Преобразует дату d в символьную строку в соответствии с заданной маской. В случае указания недопустимой маски возникает исключитель­ная ситуация «ORA-01821: формат даты не распознан». Пример:

SELECT SYSDATE d1,
TOLCHAR(SYSDATE, 'DD.MM.YY HH24:MI') d2
FROM dual



<< ПредыдущаяОглавление