понедельник, 7 сентября 2015 г.

Текущее время и часовые пояса (time zones) в базе данных Oracle

Oracle предоставляет пользователю возможность работать с данными в различных часовых поясах. Выбор функций или переменных для совершения таких операций в каждом конкретном случае может быть не всегда очевиден.
В данной статье приведена информация по теме работы с текущим временем и датами в различных временных зонах.


В базе данных Oracle имеются встроенные функции работы со временем в следующих часовых поясах.

1. Часовой пояс сессии/клиента
Текущее значение часового пояса сессии/клиента содержится в SESSIONTIMEZONE.
select SESSIONTIMEZONE from dual;

Это значение может быть изменено командой ниже.
ALTER SESSION SET TIME_ZONE='Europe/Paris';

В качестве SESSIONTIMEZONE может быть установлено одно из следующих значений:
- Значение временной зоны ОС ('OS_TZ')
- Значение временной зоны базы данных ('DB_TZ')
- Смещение временной зоны от UTC (например, '-05:00')
- Имя временной зоны (например, 'Europe/Minsk')

Для получения текущего времени в часовом поясе сессии используются переменные CURRENT_DATE, LOCALTIMESTAMP, CURRENT_TIMESTAMP.
select CURRENT_DATE from dual;
select LOCALTIMESTAMP from dual;
select CURRENT_TIMESTAMP from dual;

Они отличаются друг от друга возвращаемым типом:
CURRENT_DATE возвращает DATE, LOCALTIMESTAMP - TIMESTAMP и CURRENT_TIMESTAMP - TIMESTAMP WITH TIME ZONE


2. Часовой пояс базы данных
Текущее значение часового пояса базы данных содержится в DBTIMEZONE.
select DBTIMEZONE from dual;

Это значение используется для внутреннего хранения полей типа TIMESTAMP WITH LOCAL TIME ZONE. Такие поля преобразуются в/из часового пояса сессии при select/insert действиях, поэтому на самом деле значение DBTIMEZONE не имеет большой важности.
Это не часовой пояс переменных SYSDATE и SYSTIMESTAMP.


3. Часовой пояс операционной системы базы данных
Можно посмотреть используя переменную TZR.
select TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI TZR') from dual;

Для получения текущего времени в этом часовом поясе используются переменные SYSDATE и SYSTIMESTAMP.
select SYSDATE from dual;
select SYSTIMESTAMP from dual;


4. Часовой пояс UTC
В Oracle существет специальная функция sys_extract_utc для преобразования любого значения таймстампа в часовой пояс UTC. Ниже приведены разные варианты её использования.
select sys_extract_utc(systimestamp) from dual;
select cast(sys_extract_utc(systimestamp) as date) from dual;
select sys_extract_utc(timestamp '2000-03-28 11:30:00.00 -08:00') from dual;

Комментариев нет:

Отправить комментарий

Ярлыки

java (28) оптимизация (7) CPanel (5) svn (5) windows xp (5) ошибка (5) свой сервер (5) файлы и папки (5) gui (4) регулярные выражения (4) redmine (3) windows (3) автоматизация (3) защита данных (3) резервное копирование (3) сервер (3) JavaScript (2) Oracle SQL (2) adsl модем (2) apache tomcat (2) dropbox (2) excel (2) firewall (2) netbeans (2) office 2007 (2) samsung (2) system tray (системный трей) (2) xerox (2) вирусы (2) принтер (2) сериализация (2) удаленный рабочий стол (2) HTML (1) JFileChooser (1) MySQL (1) Nokia (1) Ovi (1) P660R-T1 (1) WakeOnLan (1) blogger.com (1) ctfmon.exe (1) email (1) flash память (1) ftp (1) ip (1) jQuery (1) jvisualWm (1) log4j (1) look and feel (1) myBatis (1) php (1) serialVersionUID (1) skype (1) smtp (1) ssh (1) swing (1) torrents (1) unix (1) vpn (1) windows 7 (1) xStarter (1) zip (1) безопасность (1) вход в систему (1) дизайн (1) документация (1) заправка (1) интернет (1) логирование (1) мышь (1) патч (1) перенос (1) печать (1) плагины (1) почтовые сообщения (1) программирование (1) процессы (1) прошивка (1) сеть (1) сеть. ошибка (1) скрытые файлы (1) списки (1) фильтрация (1) фокус (1) часовые пояса (1) шифрование (1) экран (1)