首页 > 解决方案 > Oracle 12c 如何处理 DATE 数据类型的时区数据

问题描述

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

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

谢谢你。

标签: oracledatetimezoneoracle12c

解决方案


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

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

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

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

通常你会这样做:

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

演员表是必需的,因为FROM_TZ需要 aTIMESTAMP而不是 aDATE

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


推荐阅读