oracle如何在内部存储带时区的时间戳

oracle如何在内部存储带时区的时间戳,第1张

概述基于Oracle文档,它在数字方面内部存储时区的不同部分和时区.我读了这篇文章 http://www.orafaq.com/wiki/Timestamp,它解释了时间戳内部格式的算法.所以我做了一个简单的测试来验证它. SQL> create table tz_test(id number, tz timestamp with time zone); Table created. SQL> 基于Oracle文档,它在数字方面内部存储时区的不同部分和时区.我读了这篇文章 http://www.orafaq.com/wiki/Timestamp,它解释了时间戳内部格式的算法.所以我做了一个简单的测试来验证它.

sql> create table tz_test(ID number,tz timestamp with time zone); table created. sql> insert into tz_test values(1,timestamp '1999-10-29 21:00:00 -7:00'); 1 row created. sql> insert into tz_test values(2,timestamp '1999-10-29 21:00:00 US/Pacific'); 1 row created. sql> select ID,dump(tz,10) from tz_test where tz=timestamp '1999-10-29 21:00:00 -7:00';    ID     DUMP(TZ,10) --------------------------------------------------------------------------------     1     Typ=181 Len=13: 119,199,10,30,5,1,13,60     2     Typ=181 Len=13: 119,137,156

orafaq中的文章讨论了oracle如何存储时区偏移量,我的第一行测试证明了这一点.但是没有关于如何存储时区文字的信息.所以我很想知道它.我也想在内部了解oracle如何评估timestamp’1999-10-29 21:00:00 -7:00’和timestamp’1999-10-29 21:00:00 US / Pacific’是相同的.

解决方法 它们似乎是来自 time zone file的区域ID,例如$ORACLE_HOME / oracore / zoneinfo区/ timezone_14.dat.

In this SQL Fiddle,带时区PST8PDT的值最后两个字节为0x83,0x64;它与MOS文档ID 414590.1建议的值相匹配.

我看不到任何列出所有可能值的引用,或者检查时区文件的任何明显方法.它似乎没有记录,这对内部格式来说并不合理.您可以使用相同的方法找出您感兴趣的值或所有值,但我不确定您为什么要这样做.

还有另一个您可能会觉得有用的支持文档,340512.1,这是一个关于时间戳和时区的常见问题解答.

要将区域名称转换为偏移值,您可以使用the tz_offs function,但它使用当前日期 – 因此您得到的答案取决于您是在冬季还是夏季询问.要获取特定日期的偏移量,您需要将该时间戳与UTC时间戳进行比较.而且你不能真正走另一条路,因为多个时区区域映射相同的偏移量.

总结

以上是内存溢出为你收集整理的oracle如何在内部存储带时区的时间戳全部内容,希望文章能够帮你解决oracle如何在内部存储带时区的时间戳所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1161786.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存