【问题标题】:How does Oracle 12c handle Time Zone data in DATE datatypeOracle 12c 如何处理 DATE 数据类型的时区数据
【发布时间】:2020-11-19 19:40:43
【问题描述】:

我正在使用 Oracle 数据库 12c。我想知道 oracle 如何管理 DATE 数据类型的时区详细信息。

  1. 如果我要在时区之间迁移数据,我仍然可以使用 DATE 数据类型吗?还是我必须将 TimeStamp 或 TimeStamp 与 TimeZone 一起使用?
  2. 在根据会话时区或其他 NLS 设置查询结果时,是否将 UTC 时间保留在 DB 中并进行转换?

谢谢。

【问题讨论】:

    标签: oracle date timezone oracle12c


    【解决方案1】:

    不,数据类型DATE 不处理任何时区信息。使用数据类型TIMESTAMP WITH TIME ZONETIMESTAMP WITH LOCAL TIME ZONE

    TIMESTAMP WITH TIME ZONE 保存日期 + 时间 + 时区

    TIMESTAMP WITH LOCAL TIME ZONE 保存日期+时间,这些在内部存储在DBTIMEZONE(通常是UTC)中。该值总是显示在当前用户会话时区SESSIONTIMEZONE

    如果您想将DATE 转换为TIMESTAMP WITH {LOCAL} TIME ZONE,那么您必须告诉Oracle 应该使用哪个时区。

    通常你会这样做:

    FROM_TZ(CAST({date_value} AS TIMESTAMP), 'desired time zone')
    

    演员表是必需的,因为FROM_TZ 需要TIMESTAMP 而不是DATE

    如果您不指定时区,例如比如CAST({date_value} AS TIMESTAMP WITH TIME ZONE),那么Oracle默认时区为SESSIONTIMEZONE

    【讨论】:

    • 因此,简单来说,如果我使用 DATE 数据类型将我的数据迁移到不同时区的数据库,则在查看包括时间部分的数据时不会改变任何内容。对吗?
    • 是的,DB的时区对任何DATE值都没有影响
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2015-12-13
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多