четверг, 24 марта 2011 г.

Типы данных с TIMESTAMP

Вот наконец-то решил опубликовать статью о языке PL/SQL. Давно я уже этого не делал – последнюю статью по этой теме написал аж шестого марта. Можно сказать – проленился. Сегодня будут рассмотрены опять типы данных (да, вот такая вот большая тема), но скоро она уже закончится и я перейду к управляющим элементам (циклам и тд). Сегодня рассмотрю TIMESTAMP WITH TIME ZONE и TIMESTAMP WITH LOCAL TIME ZONE.

А мне вот интересно стало – если отойти подальше от монитора – то можно ли увидеть буквы? Если использовать бинокли – то вы точно все сможете увидеть. В этом онлайн-магазине представлен громадный выбор этих самых биноклей - столько их я еще ни разу не видел. Так что - загляните, не пожалеете. Но - перейдем теперь к языку PL/SQL.


Тип данных TIMESTAMP WITH TIME ZONE:

Данный тип являет собой улучшенный TIMESTAMP, но – он включает смещение часового пояса (фразницу в часах и минутах между местным временем и временем UTCCoordinated Universal Time – всемирное координационное время. UTC – это новое название времени по Гринвичу, вот этого я раньше не знал).

Синтаксис:

TIMESTAMP[(точность)] WITH TIME ZONE;

Здесь необязательный параметр точность указывает количество цифр в дробной части поля секунд. Точность нельзя задавать символьной константой или переменной (так же, как и типа TIMESTAMP), необходимо использовать целочисленный литерал по значением в диапазоне от 1 до 9. Значение по умолчанию равно шести.

Формат временной метки со смещением часового пояса, используемый по умолчанию, устанавливается параметром инициализации NLS_TIMESTAMP_TIMEZONE_FORMAT.
Вот небольшой пример:

DECLARE
vTimeStamp TIMESTAMP(4) WITH TIME ZONE;
BEGIN
vTimeStamp := sysdate;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(vTimeStamp));
            END;

Результатом работы данного кода будет следующая строка: «23.03.11 14:04:18,0000+03:00». В этом примере смещение часового пояса составляет три часа (+03:00).

Можно также указывать часовой пояс с помощью символьного имени. Спецификация может включать длинную форму (например – ‘US/Pacific’), сокращение (‘PDT’) или комбинация того и другого (пример не буду приводить).

Названия часовых поясов можно узнать из столбцов TIMEZONE_REGION и TIMEZONE_ABBR представления V$TIMEZONE_NAMES словаря данных.

Значения TIMESTAMP WITH TIME ZONE считаются равными, если они представляют одно время относительно UTC, независимо от указанных в них смещений часовых поясов.

Тип данных TIMESTAMP WITH LOCAL TIME ZONE:

Этот тип данных также является расширением TIMESTAMP, включает в себя смещение часового пояса (пока не понял как).

Этот тип данных отличается от TIMESTAMP WITH TIME ZONE тем, что когда происходит вставка значения в столбец базы данных, значение приводится к часовому поясу базы данных и смещение часового пояса в столбце не хранится. При выборке значения из базы данных оно возвращается в локальном часовом поясе сеанса:

DECLARE
vTimeStamp TIMESTAMP WITH LOCAL TIME ZONE;
BEGIN
vTimeStamp := sysdate;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(vTimeStamp));
END;


Результатом этого кода будет вот что: «23.03.11 14:21:30,000000». Как вы поняли – почти идентичен этот тип данных типу TIMESTAMP.

Вот такие вот типы. Как я уже сказал – скоро я опубликую последние статьи, связанный с типами данных – сразу перейду к управляющим конструкциям. Это различные циклы, ветвления и другое. Так что ждите.

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

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