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

изменения оператором ROLLBACK.

Объединение вызовов функций T O _C H A R () и T O _D A T E ()

Можно объединять вызовы функций T0_CHAR() и T0_DATE(). Это позволяет

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

форматах. В следующем запросе функции T0_CHAR() и T0_DATE() объединяются,

чтобы показать только временную часть типа дата-время; выходные

данные T0_DATE() передаются в T0_CHAR():

□ SELECT T0_CHAR(T0_DATE(’05-FEB-1968 19:32:36',

'DD-MON-YYYY HH24:MI:SS'), 'HH24:MI:SS')

FROM dual;

T0_CHAR(

19:32:36

Установка формата даты по умолчанию

Формат даты по умолчанию специфицируется в параметре базы данных

NLS_DATE_F0RMAT. АБД может изменить установку NLS_DATE_F0RMAT, установив

новое значение этого параметра в файлах базы данных init.ora или spfile.

ora, которые оба считываются при запуске базы данных. Кроме того, он

может изменить значение параметра NLS_DATE_F0RMAT, используя команду

146 Глава 5

ALTER SYSTEM. Можно также установить параметр NLS_DATE_FORMAT для вашего

сеанса, используя SQITPlus. Это делается с помощью команды ALTER

SESSION. Например, следующий оператор ALTER SESSION устанавливает NLS_

DATE_FORMAT на MONTH-DD-YYYY:

□ SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'MONTH-DD-YYYY';

Session a lte re d

Примечание Сессия стартует, когда вы подключаетесь к базе данных, и заканчивается, когда

вы отключаетесь от неё.

Действие этого нового формата можно увидеть на примере выходных

данных следующего запроса, который выбирает столбец dob для покупателя

№ 1:

□ SELECT dob

FROM customer

WHERE customer_id = 1;

DOB

JANUARY -01-1965

Новый формат даты можно использовать и при вставке строк в таблицу

базы данных. Следующий оператор INSERT добавляет новую строку в таблицу

customers. Обратите внимание на использование нового формата даты

(MONTH-DD-YYYY) при задании значения столбцу dob:

□ INSERT INTO customers (

customer_id, firs t_n am e , last_name, dob, phone

) VALUES (

6, ‘ F re d ’ , ‘ Brown’ , ‘ MARCH-15-1970’ , ‘ 800-555-1215’

);

Если отключиться от базы данных и подключиться к ней снова как

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

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

команды ALTER SESSION изменения действуют только на протяжении

того сеанса, в котором они сделаны: при отключении от базы

данных сделанные изменения теряются.

Примечание Если вы выполнили предыдущее выражение INSERT, удалите эту строку при

помощи DELETE FROM customers WHERE customer_id = 6.

Как Oracle интерпретирует двузначное обозначение года

В базе данных Oracle хранятся все четыре цифры года, но если предоставить

базе данных только две последние цифры, Oracle будет интерпретировать

первые две цифры (столетие) в зависимости от того, какой формат

- YY или RR - был использован при вводе.

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

Совет Рекомендуется всегда указывать при вводе в базу данных Oracle даты все четыре

цифры года. В этом случае не придется потом раздумывать, какой год имеется в виду.

Использование формата YY

Если в формате для представления года используется YY и предоставлены

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

текущее столетие, которое в настоящее время установлено на сервере

базы данных. Следовательно, первые две цифры представленного года устанавливаются

равными двум первым цифрам текущего года. Так, например,

если представленный год равен 15, а текущий год - 2006, представленный

год будет записан как 2015, а 75 - как 2075.

Примечание Если используется формат YYYY, но предоставлены только две последние

цифры года, дата будет интерпретироваться с использованием формата YY.

Ниже приведен запрос, который использует при интерпретации годов

15 и 75 формат YY. В следующем примере входные даты 15 и 75 передаются

в T0_DATE(), чей выход затем передается в T0_CHAR(), которая конвертирует

даты в строки с форматом DD-M0N-YYY. (Здесь использован формат YYYY,

чтобы можно было видеть все четыре цифры года, возвращаемые Т0_

DATEO.)

□ SELECT

T0_CHAR(T0_DATE(‘04-JUL-15’, ‘DD-M0N-YY’), 1 DD-M0N-YYYY’),

T0_CHAR(T0_DATE(‘04-JUL-75’, ' DD-M0N-YY’), ‘ DD-M0N-YYYY’)

FROM dual;

T0_CHAR(T0_ T0_CHAR(T0_

04—JUL-2015 04-JUL-2075

Как и ожидалось, годы 15 и 75 интерпретируются как 2015 и 2075 соответственно.

Использование формата BR

Если выбран формат даты RR и предоставлены только две цифры года,

первые две цифры года будут определены с использованием предоставленных

двух последних цифр года и последних двух цифр текущего года, установленного

для сервера базы данных. Для вычисления столетия для представленного