上一个日期在oracle的太平洋时区获取

时间:2016-07-08 09:06:47

标签: oracle date

在我的代码中,当我将一个日期保存为东部时区的今天日期时,它会在我们查看时正确显示。但在太平洋时区,它显示的是上一个日期,即昨天的日期。我们将日期存储在Oracle中作为日期字段。

在太平洋时间内完成核心日期所需的任何特殊编码?

1 个答案:

答案 0 :(得分:0)

日期没有时区 - 所以当您存储来自不同时区的日期时,您需要确保将它们转换为同一时区。

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