【问题标题】:Oracle database and time zonesOracle 数据库和时区
【发布时间】:2015-06-09 13:55:25
【问题描述】:

我正在使用 Oracle 数据库。 每个表都有一个 creationdate 和 lastmodified 字段。 lastmodified 是时区的实际时间(如果需要,UTC+1 + 夏令时),而 creationdate 是同一时间,但在 UTC+0,夏令时相差 2 小时,否则相差 1 小时。 有没有办法更改创建日期,以便在需要时也使用 utc+1 + 夏令时?谢谢

【问题讨论】:

  • 这些列的数据类型是什么以及它们是如何填充的?
  • 是类型Date,不知道是怎么填的,但是每次发送请求,新建一行的时候,字段creationdate都会更新,当它只是一个update,lastmodified是更新的,是自动的,可能是oracle做的,也可能是别的地方配置的,不知道。

标签: oracle timezone


【解决方案1】:

你可以用这个:

ALTER SESSION SET TIME_ZONE = 'Europe/Zurich';
SELECT 
    TO_TIMESTAMP_TZ(TO_CHAR(creationdate,'yyyymmddhh24miss"UTC"'), 'yyyymmddhh24missTZR') AT LOCAL AS creationdate_local_TIMESTAMP,
    CAST(TO_TIMESTAMP_TZ(TO_CHAR(creationdate,'yyyymmddhh24miss"UTC"'), 'yyyymmddhh24missTZR') AT LOCAL AS DATE) AS creationdate_local_DATE  
FROM your_table;

您必须将会话时区设置为上述区域。如果您使用静态值(例如ALTER SESSION SET TIME_ZONE = '+02:00';),它将无法正常工作。

重要提示:如果您使用转换后的时间值更新表格,那么您必须确保不要多次执行此操作,因为每次更新您的时间都会一次又一次地偏移 1 或 2 小时。

【讨论】:

  • 我试过了,结果我有 2 个字段:creation_local_timestamp 和 creation_local_date。两者都有我想要的时间,但是当我查看我的 creationdate 字段的值时,它仍然是一样的,就像什么都没发生一样。我正在寻找一种解决方案,它可以更新已经存在的创建日期,而且对于每个新行,创建日期也将匹配这个时区,就像 lastmodified 已经做的那样
猜你喜欢
  • 2018-05-13
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 2010-09-15
  • 1970-01-01
  • 2013-01-28
相关资源
最近更新 更多