›  ›  ›  › Типы данных даты и времени в PL/SQL Oracle

Типы данных даты и времени в PL/SQL Oracle

В Oracle присутствует несколько основных типа даты и времени, давайте их рассмотрим:

DATE

Хранит значение даты и времени с точностью до секунд. Не содержит информации часового пояса.

TIMESTAMP

Хранит значение даты и времени без информации о часовом поясе. Эквивалентен типу данных DATE, отличаясь от него лишь тем, что время хранится с точностью до миллиардной доли секунды.

TIMESTAMP WITH TIME ZONE

Хранит вместе со значением даты и времени информацию о часовом поясе с точностью до девяти десятичных позиций.

TIMESTAMP WITH LOCAL TIME ZONE

Хранит значение даты и времени с точностью до девяти десятичных позиций. Значения этого типа автоматически преобразуются между часовым поясом базы данных и местным (сеансовым) часовым поясом. При хранении в базе данных значения преобразуются к часовому поясу базы данных, а при выборке они преобразуются к местному (сеансовому) часовому поясу.

INTERVAL

Типы данных INTERVAL, предназначены для сохранения и обработки временных промежутков и разделяются на два типа:

  • INTERVAL YEAR TO MONTH — позволяет определить интервал времени в годах и месяцах;
  • INTERVAL DAY TO SECOND — позволяет определить интервал времени в днях, часах, минутах и секундах (с долями секунд).

Разобраться во всех особенностях этих типов, особенно TIMESTAMP WITH LOCAL TIME ZONE, бывает непросто. Для примера рассмотрим использование типа TIMESTAMP WITH LOCAL TIME ZONE в календарном приложении для пользователей, работающих в разных часовых поясах. В качестве времени базы данных используется всеобщее скоординированное время UTC (Universal Coordinated Time — Всеобщее скоординированное время). Пользователь Джонатан, живущий в Мичигане (Восточный часовой пояс, смещение от UTC составляет –4:00), запланировал проведение видеоконференции с 16:00 до 17:00 в четверг по своему местному времени. У Донны из Денвера (Горный часовой пояс, смещение составляет –6:00) конференция приходится на промежуток времени с 14:00 до 15:00 в четверг. У Селвы из Индии (смещение +5:30) конференция пройдет с 01:30 до 02:30 в пятницу. На рисунке ниже показано, как время начала конференции изменяется при выборке из базы данных пользователями из разных часовых поясов.

Типы данных даты и времени в PL/SQL Oracle

На рисунке выше пользователь Джонатан находится в Восточном часовом поясе с действием летнего времени, в котором время отстает от UTC на 4 часа (UTC-4:00). Джонатан вводит время начала собрания 16:00. Это значение преобразуется к часовому поясу базы данных (UTC) при вставке записи, и в базе данных сохраняется значение 20:00.

Донна находится в Денвере, где также действует летнее время; текущее время отстает от UTC (UTC-6:00). Когда Донна выбирает время начала встречи, значение преобразуется к сеансовому часовому поясу и отображается в формате 14:00. Селва находится в Индии, где летнее время не действует — индийское стандартное время смещено на 5,5 часа вперед от UTC (UTC+5:30). Когда Селва выбирает время начала встречи, значение преобразуется к сеансовому часовому поясу и выводится в формате 1:30.

Поручая преобразования часовых поясов типу данных TIMESTAMP WITH LOCAL TIME ZONE, вы избавляетесь от необходимости программирования сложных правил, связанных с часовыми поясами и летним временем, а заодно избавляете ваших пользователей от необходимости разбираться с преобразованиями.

В одних случаях база данных должна автоматически изменять формат вывода времени, в других это не нужно. Если вы не хотите, чтобы формат значения времени изменялся в соответствии с сеансовыми настройками, используйте тип данных TIMESTAMP или TIMESTAMP WITH TIME ZONE.

Метки: , .

Записи по теме

Добавить комментарий

Ваш адрес email не будет опубликован.