изменения оператором 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 и предоставлены только две цифры года,
первые две цифры года будут определены с использованием предоставленных
двух последних цифр года и последних двух цифр текущего года, установленного
для сервера базы данных. Для вычисления столетия для представленного