【问题标题】:Change timezone component of TIMESTAMP WITH TIMEZONE in Oracle在 Oracle 中更改 TIMESTAMP WITH TIMEZONE 的时区组件
【发布时间】:2012-06-21 19:56:33
【问题描述】:

我有一些数据存储在 Oracle 的 TIMESTAMP(6) WITH TIMEZONE 列中,但它存储在错误的时区。按照惯例,数据库中的所有时间戳都必须以 UTC 格式存储,但该数据被错误地保存为 EDT。实际值等同于正确的 UTC 值;问题只是它被存储为19-JUN-12 12.20.42.000000000 PM AMERICA/NEW_YORK,而它应该是19-JUN-12 16.20.42.000000000 PM UTC。 Oracle 中有任何方法来改变这种情况吗?

【问题讨论】:

    标签: oracle timezone timestamp ddl timestamp-with-timezone


    【解决方案1】:

    您真的需要更改存储在数据库中的数据吗?通常,只需转换为不同的时区进行显示就足够了,即

    SELECT <<your_timestamp_column>> AT TIME ZONE 'UTC'
      FROM <<your table>>
    

    当然,如果你愿意,你也可以

    UPDATE <<your table>>
       SET <<your timestamp column>> = <<your timestamp column>> AT TIME ZONE 'UTC'
    

    更改所有数据。

    【讨论】:

    • 我无法控制读取数据的所有地方,因此它需要与其他地方的操作方式保持一致。非常感谢,顺便说一句。你不会相信我刚刚完成了原型设计来完成这个的令人发指的 hack(我嵌套了 5 个铸造函数 shudder)。
    • @Justin Cave- 执行此更新后,插入的新数据将在新时区还是仅更新现有数据?
    • @Abhishekkumar - UPDATE 语句只会影响现有数据。如果您希望新插入的数据采用 UTC,则需要在插入该数据的过程中将 timestamp 转换为 UTC。
    猜你喜欢
    • 2010-10-09
    • 2017-05-23
    • 2016-04-21
    • 2017-05-27
    • 2023-01-10
    • 2019-01-28
    • 2012-03-02
    • 2019-12-19
    • 1970-01-01
    相关资源
    最近更新 更多