Oracle 12c 如何处理 DATE 数据类型的时区数据
How does Oracle 12c handle Time Zone data in DATE datatype
我正在使用 Oracle Database 12c。我想知道 oracle 如何管理 DATE 数据类型的时区详细信息。
- 如果我要在时区之间迁移数据,我仍然可以使用 DATE 数据类型吗?还是我必须使用 TimeStamp 或 TimeStamp with TimeZone?
- 它是否将 UTC 时间保留在数据库中并在根据会话时区或其他一些 NLS 设置查询结果时转换它?
谢谢。
不,数据类型DATE
不处理任何时区信息。使用数据类型 TIMESTAMP WITH TIME ZONE
或 TIMESTAMP WITH LOCAL TIME ZONE
TIMESTAMP WITH TIME ZONE
保存日期+时间+时区
TIMESTAMP WITH LOCAL TIME ZONE
保存日期 + 时间,这些在内部存储在 DBTIMEZONE
中(通常是 UTC
)。在当前用户会话时区 SESSIONTIMEZONE
.
中显示的值为 always
如果您想将 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
我正在使用 Oracle Database 12c。我想知道 oracle 如何管理 DATE 数据类型的时区详细信息。
- 如果我要在时区之间迁移数据,我仍然可以使用 DATE 数据类型吗?还是我必须使用 TimeStamp 或 TimeStamp with TimeZone?
- 它是否将 UTC 时间保留在数据库中并在根据会话时区或其他一些 NLS 设置查询结果时转换它?
谢谢。
不,数据类型DATE
不处理任何时区信息。使用数据类型 TIMESTAMP WITH TIME ZONE
或 TIMESTAMP 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