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; это
означает, что можно записать не более чем двузначную продолжительность
интервала в годах. Если попытаться добавить в таблицу