oracle - Oracle 12c 如何处理 DATE 数据类型的时区数据
问题描述
我正在使用 Oracle 数据库 12c。我想知道 oracle 如何管理 DATE 数据类型的时区详细信息。
- 如果我要在时区之间迁移数据,我仍然可以使用 DATE 数据类型吗?或者我是否必须将 TimeStamp 或 TimeStamp 与 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
中。
如果您想将 a 转换DATE
为TIMESTAMP 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
推荐阅读
- copy - 将一系列相邻列从 Sheet1 复制到 Sheet2
- javascript - 修改函数以仅反转第三个单词
- node.js - UnhandledPromiseRejectionWarning: 错误: npm start 后用户“”的密码验证失败
- r - 满足标准的向量元素的独特组合
- python - 如何检查一组坐标是否与Python中的俄罗斯方块相匹配
- javascript - Shopify 立即购买按钮自定义
- data-distribution-service - DDS 安全证书存储
- r - 在 r 中由 ggpubr 在箱形图中添加方差分析测试结果
- mongodb - Mongoose model.find() 函数在第二个连接中不起作用
- objective-c - NSTextField 获取默认边距尺寸