Выбрать главу

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 очень полезно,

если в вашей организации внедрена глобальная система, доступ к которой осуществляется со

всего мира. Это объясняется тем, что база данных хранит данные типа метка даты/времени