我想在将它插入表格时调整夏季/冬季时间和时区的日期

时间:2014-11-10 10:51:39

标签: sql oracle utc

我在TABLE_A中有一个GMT中的日期和时间变量。我想在TABLE_B中插入这个日期和时间,但我希望根据时区和夏季/冬季时间调整插入的值。 那就是:

 INSERT into TABLE_A (ADJUSTED_DATE_AND_TIME)

 SELECT GMT_DATE_AND_TIME [Perform proper adjustments here..?]

 FROM TABLE_A

我可以这样做吗?在那种情况下,我该怎么写?

感谢。

1 个答案:

答案 0 :(得分:0)

我认为你可以简单地转换GMT / UTC时间。但是,您必须获取时区的完整区域名称。

SELECT TIMESTAMP '2014-06-10 12:00:00 +00:00' AT TIME ZONE 'Europe/Zurich' AS summer FROM dual;

SUMMER                                 
---------------------------------------
10.06.2014 14:00:00.000000000 +02:00   


SELECT TIMESTAMP '2014-12-10 12:00:00 +00:00' AT TIME ZONE 'Europe/Zurich' AS winter FROM dual;

WINTER                                 
---------------------------------------
10.12.2014 13:00:00.000000000 +01:00   

由于您的源值是数据类型DATE,因此您必须执行以下步骤。

  1. DATE投放到TIMESTAMP
  2. 使用FROM_TZ
  3. 设置值的时区
  4. 使用AT TIME ZONE '...'
  5. 将值转换为新时区
  6. 将值转换为DATE
  7. 写在一个声明中

    select 
    CAST(FROM_TZ(CAST(sy_sttime AS TIMESTAMP), 'UTC') AT TIME ZONE 'Europe/Zurich' AS DATE)
    from sy_request
    

    或者说不太清楚

    select
    CAST((CAST(sy_sttime AS TIMESTAMP) AT TIME ZONE 'UTC') AT TIME ZONE 'Europe/Zurich' AS DATE)
    from sy_request