Даты не имеют часового пояса - поэтому, когда вы храните даты из разных часовых поясов, вам необходимо убедиться, что вы конвертируете их в один и тот же часовой пояс.
CREATE TABLE table_name(id INT, value DATE);
INSERT INTO table_name VALUES(1, TIMESTAMP '2016-07-07 23:00:00 PST' AT TIME ZONE 'UTC');
INSERT INTO table_name VALUES(1, TIMESTAMP '2016-07-07 23:00:00 EST' AT TIME ZONE 'UTC');
Тогда:
SELECT id,
value AS utc,
CAST(
FROM_TZ(CAST(value AS TIMESTAMP), 'UTC') AT TIME ZONE 'EST'
AS DATE
) AS EST,
CAST(
FROM_TZ(CAST(value AS TIMESTAMP), 'UTC') AT TIME ZONE 'PST'
AS DATE
) AS PST
FROM table_name t;
Выходы:
ID UTC EST PST
-- ------------------- ------------------- -------------------
1 2016-07-08 06:00:00 2016-07-08 01:00:00 2016-07-07 23:00:00
2 2016-07-08 04:00:00 2016-07-07 23:00:00 2016-07-07 21:00:00
выберите to_date (to_char (systimestamp в часовом поясе '6:00', 'дд.мм.гггг HH24: MI: сс '),' dd.mm.yyyy hh24: mi: ss ') из двойного? –
У меня есть поле start_date в БД. Как я его извлечу, используя выше? – user3151468
вы вставляете временную метку с часовым поясом в поле даты «дата»? если да, то вам нужно изменить часовой пояс, прежде чем вставить вот так: вставить в значения some_table (start_date) (systimestamp в часовом поясе «6:00»); - потому что конвертировать –