customer_id INTEGER REFERENCES customers(customer_id),
made_on TIMESTAMP(4)
);
Примечание Таблица purchases_with_timestamp создается и заполняется строками при помощи
сценария store_schema.sql. Ниже представлены другие таблицы, создаваемые этим сценарием,
так что вам не придется вручную набирать операторы CREATE TABLE.
158 Глава 5
Обратите внимание, что для TIMESTAMP из столбца made_on указана точность
4 десятичных знака. Это означает, что справа от десятичной точки в столбце
made_on для секунд может храниться до четырех десятичных знаков.
Для простоты выше не определен первичный ключ таблицы purchased_
with_timestamp. В ваших собственных таблицах вы не должны забывать
создавать первичные ключи.
Для передачи в базу данных литерального значения типа TIMESTAMP используется
ключевое слово TIMESTAMP вместе со значением даты-времени в
следующем формате:
□ TIMESTAMP 'YYYY-MM-DD НН24:MI:SS.SSSSSSSSS'
После десятичной точки указано девять символов S. Это означает, что
в литеральной строке можно задавать для дробной части секунд до девяти
цифр.
Как много можно реально хранить в вашем столбце типа TIMESTAMP, зависит
от того, сколько цифр вы зарезервировали для хранения дробной
части секунд при определении столбца. Например, в столбце made_on таблицы
ри rchases_with_timestamp можно хранить до четырех цифр после десятичной
точки. При попытке добавить строку, содержащую более четырех
знаков после десятичной точки, дробная часть будет округлена.
□ 2005-05-13 07:15:31.123456789
будет округлено до
П 2005-05-13 07:15:31.1235
Следующий оператор INSERT добавляет строку в таблицу purchases_
with_timestamp. Обратите внимание, как используется ключевое слово
TIMESTAMP для предоставления литерала дата-время:
П INSERT INTO purchases_with_timestamp (
prod u ct_id , customer_id, made_on
) VALUES (
1, 1, TIMESTAMP ‘ 2005-05-13 07:15:31.1234’
);
Примечание He требуется вводить этот оператор INSERT: он выполняется в сценарии store_
schema.sql. Это же справедливо и для других операторов INSERT (см. ниже).______________ ^
Для выборки введенной строки используется следующий запрос:
□ SELECT *
FROM purchases_with_timestainp;
PR0DUCT_ID CUST0MER_ID MADE_0N
11 13-MAY-05 07.15.31.1234 A.M.
Использование типа T IM E ST AM P W IT H T IM E Z O N E
Тип TIMESTAMP WITH TIME ZONE расширяет тип TIMESTAMP, чтобы обеспечить
возможность хранить информацию о часовом поясе. Следующий оператор
Хранение и обработка дат и времени 159
создает таблицу pu rchases_timestamp_with_tz, в которой хранятся сведения о
покупках покупателя. В этой таблице есть столбец типа TIMESTAMP WITH TIME
ZONE, названный made_on, для записи времени, когда была сделана покупка:
П CREATE TABLE purchases_timestamp_with_tz (
produ ct_id INTEGER REFERENCES p ro d u c ts (p ro d u c t_ id ),
customer_id INTEGER REFERENCES cu stom e rs(cu stom e r_id ),
made_on TIMESTAMP(4) WITH TIME ZONE
);
Для предоставления в базу данных литерала типа метка даты/времени
с часовым поясом к фразе TIMESTAMP просто добавляется часовой пояс. В
следующую фразу TIMESTAMP включено смещение на минус семь часов
(-07:00):
□ TIMESTAMP '2005-05-13 07:15:31.1234 -07:00'
Кроме того, можно вместо непосредственного смещения указать название
региона, как сделано в следующем примере, где специфицирован часовой
пояс PST:
□ TIMESTAMP '2005-05-13 0 7 :-15:31.1234 PST'
В следующие операторы INSERT добавляют две строки в таблицу
purchase_timestamp_with_tz, используя два предыдущих литерала
TIMESTAMP для установки значений столбца made_on для новых строк:
□ INSERT INTO pu rchases/: imestamp_with_tz (
produ ct_id, customer_id, made_on
) VALUES (
1, 1, TIMESTAMP ‘ 2005-05-13 07:15::31.1234 -0 7 :0 0 ’
);
INSERT INTO purchases_timestamp_with_tz (
produ ct_id, customer_id, made_on
) VALUES (
1, 2, TIMESTAMP ‘ 2005-05-13 07:15::31.1234 PST'
);
Следующий запрос осуществляет выборку введенных строк:
□ SELECT *
FROM purchases_timestamp_with_tz;
PR0DUCT_ID CUST0MER_ID MADE_0N
1 1 13-MAY-05 07.15.31.1234 AM -07:00
1 2 13-MAY-05 07.15.31.1234 AM PST
Использование типа T IM E ST AM P W IT H L O C A L T IM E Z O N E
Тип TIMESTAMP WITH LOCAL TIME ZONE расширяет стандартный TIMESTAMP,
чтобы в нем можно было хранить информацию о локальном временном
поясе, установленном для базы данных. Когда данные типа метка даты/
времени представляются для записи в столбец типа TIMESTAMP WITH LOCAL
160 Глава 5
TIME ZONE, они конвертируются (или нормализуются) к часовому поясу,
установленному для базы данных. При дальнейшем выборе этих данных
они будут нормализованы к часовому поясу, установленному для вашего
сеанса.
Совет Использование данных типа TIMESTAMP WITH LOCAL TIME ZONE очень полезно,
если в вашей организации внедрена глобальная система, доступ к которой осуществляется со
всего мира. Это объясняется тем, что база данных хранит данные типа метка даты/времени