Выбрать главу

EXTRACT(DAY FROM T0_DATE(‘ 01-JAN-2005 19:15:26’ ,

‘ DD-MON-YYYY HH24:MI:SS’ ) ) AS DAY,

FROM dual;

Хранение и обработка дат и времени 163

YEAR MONTH DAY

2005 1 1

В следующем примере EXTRACT( ) используется для извлечения дня, часа,

минут и секунд из значения TIMESTAMP, возвращаемого функцией Т0_

TIMESTAMPO:

□ SELECT

EXTRACT(HOUR FROM TIMESTAMP ( ' 01-JAN-2005 19:15:26’ ,

‘ DD-MON-YYYY HH24:MI:SS’ ) ) AS HOUR,

EXTRACT(MINUTE FROM TIMESTAMP ( ‘ 01-JAN-2005 19:15:26’ ,

‘ DD-MON-YYYY HH24:MI:SS’ ) ) AS MINUTE,

EXTRACT(SECOND FROM TIMESTAMP ( ‘ 01-JAN-2005 19:15:26’ ,

‘ DD-MON-YYYY HH24:MI:SS’ ) ) AS SECOND

FROM dual;

HOUR MINUTE SECOND

19 15 26

В заключительном прймере функция EXTRACT( ) используется для получения

часового пояса, часов, минут, секунд, региона и сокращения региона

из значения TIMESTAMP WITH TIMEZ0NE, возвращаемого функцией Т0_

TIMESTAMP_TZ():

□ SELECT

EXTRACT(TIMEZ0NE_H0UR FROM T0_TIMESTAMP_TZ(

‘ 01-JAN-2005 19:15:26 -7:15’ , ‘ DD-MON-YYYY HH24:MI:SS TZH:TZM’ ))

AS TZH,

EXTRACT(TIMEZONE_MINUTE FROM TO_TIMESTAMP_TZ(

‘ 01—JAN-2005 19:15:26 -7:15’ , ‘ DD-MON-YYYY HH24:MI:SS TZH:’ ) )

AS TZM,

EXTRACT(TIMEZ0NE_REGI0N FROM TO_TIMESTAMP_TZ(

‘ 01-JAN-2005 19:15:26 -7 :1 5 ’ , ‘ DD-MON-YYYY HH24:MI:SS:TZR’ ))

AS TZR,

EXTRACT(TIMEZ0NE_ABBR FROM TO_TIMESTAMP_TZ(

' 01-JAN-2005 19:15:26 PST’ , ‘ DD-MON-YYYY HH24:MI:SS:TZR’ ))

AS TZA

FROM dual;

TZH TZM TZR TZA

-7 -15 PST PST

F R O M _T Z ()

Функция FR0M_TZ(x, часовой_пояс) используется для конвертирования значения

х типа TIMESTAMP и часового пояса, специфицированного в параметре

часовой_пояс, в тип TIMESTAMP WITH TIMEZONE:

□ SELECT FR0M_TZ(TIMESTAMP ’ 2005-05-13 07:15:31.1234’ , ’ EST’ )

FROM dual;

FR0M_TZ(TIMESTAMP ‘ 2005-05-13 07:15:3

13-MAY-05 07.15.31.123400000 AM EST

164 Глава 5

Обратите внимание, что к представленному на входе значению

TIMESTAMP добавлено значение часового пояса (EST).

SY S _EX TR A CT _U TC ()

Функция SYS_EXTRACT_UTC() используется для конвертирования значения х

типа TIMESTAMP WITH TIMEZ0NE в тип TIMESTAMP, содержащий дату и время для

UTC:

□ SELECT

SYS_EXTRACT_UTC(TIMESTAMP ‘ 2005-05-13 19:15:26 PST’ )

FROM dual;

SYS_EXTRACT_UTC(TIMESTAMP’ 2005-

14-MAY-05 02.15.26.000000000 AM

Часовой пояс PST на семь часов отстает от UTC, поэтому в примере

возвращается значение TIMESTAMP, на семь часов опережающее представленное

значение TIMESTAMP WITH TIMEZ0NE, которое было передано в SYS_

EXTRACT_UTC().

TO _T IM E S T AM P ()

Функция T0_TIMESTAMP(x, формат) используется для конвертирования строки

х (CHAR, VARCHAR2, NCHAR или NVARCHAR2) в TIMESTAMP. Можно также специфицировать

для х дополнительный параметр формат:

□ SELECT T0_TIMESTAMP('2005-05-13 07:15:31.1234',

■YYYY-MM-DD НН24:MI:SS.FF*)

FROM dual;

T0_TIMESTAMP(‘ 2005-05-1307:15:3

13-MAY-05 07.15.31.123400000 AM

T O _T IM E S T AM P _T Z ()

Функция T0_TIMESTAMP_TZ(x [, формат]) используется для конвертирования

х в тип TIMESTAMP WITH TIMEZ0NE с дополнительным параметром формат для

х. Следующий запрос передает регион часового пояса PST (используется

формат TZR) в функцию T0_TIMESTAMP_TZ():

□ SELECT T0_TIMESTAMP_TZ('2005-05-13 07:15:31.1234 PST',

‘YYYY-MM-DD HH24:MI:SS.FF TZR’)

FROM dual;

T0_TIMESTAMP_TZ(‘ 2005-05-1307:15:31

13-MAY-05 07.15.31.123400000 AM PST

Следующий пример передает в функцию T0_TIMESTAMP_TZ() часы и минуты

часового пояса -7:00 (используя форматы TZR и TZM):

□ SELECT T0_TIMESTAMP_TZ('2005-05-13 07:15:31.1234 -7:00’,

'YYYY-MM-DD НН24:MI:SS.FF TZH:TZM’)

FROM dual;

Хранение и обработка дат и времени 165

TO_TIMESTAMP_TZ(‘ 2005-05-1307:15:31.12

13-MAY-05 07.15.31.123400000 AM -07:00

Использование временных интервалов

В базе данных Oracle9i появились типы данных, позволяющие хранить

временные интервалы. Примерами временных интервалов являются

■ 1 год и 3 месяца

■ 25 месяцев

■ -3 дня 5 ч 16 мин

■ 1 сутки и 7 ч

■ -56 ч

Примечание Не следует путать временные интервалы со значениями типов дата-время или

метками даты/времени. В этих значениях записываются конкретные дата и время (например,

7:32:16 P.M. on October 28, 2006). Временной же интервал отображает промежуток времени

(например, 1 год и 3 месяца):

В примере с магазином можно предложить покупателям ограниченные

по времени скидки на товары, например, использовать купон, который

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

рекламным предложением, которое остается в силе всего несколько

дней. (Примеры купонов и специальных рекламных предложений см. ниже

в этом разделе.)

Таблица 4.8. Типы временных интервалов

Тип Описание

interval year Для хранения временного интервала, измеряемого в годах и месяцах,

[ (разрядность, можно определить необязательную разрядность лет, если указать до-

лет) ] то month полнительный параметр разрядность_лет, который может быть целым

числом от 0 до 9. Разрядность по умолчанию равняется 2; это

означает, что можно записать не более чем двузначную продолжительность

интервала в годах. Если попытаться добавить в таблицу