4

如何将 2012-04-12 00:00:00 转换为 DB2 中的 unix 时间戳。sql 中是否有任何可用的内置函数

谢谢你。

4

2 回答 2

5

使用DAYSandMIDNIGHT_SECONDS比 更精确TIMESTAMPDIFF

SELECT
86400*(DAYS(CURRENT TIMESTAMP - CURRENT TIMEZONE)-DAYS('1970-01-01'))
+ MIDNIGHT_SECONDS(CURRENT TIMESTAMP - CURRENT TIMEZONE)
"UNIX_TIMESTAMP"
FROM SYSIBM.SYSDUMMY1
于 2016-04-11T15:55:06.010 回答
3

Unix timestamp我假设您的意思是自 1970-01-01 00:00:00 UTC 以来的秒数(或其他) 。

DB2(从 V6R1 开始)没有内置的功能。
您还面临以下问题:

  • DB2 中的所有时间戳都是“本地时间”——它们不包含时区信息,所有CURRENT_TIMESTAMP写入都基于请求系统认为的时间,而不是主机。
  • 夏令时经常变化。您需要增加开销来管理您的转换。
  • TIMESTAMPDIFF函数返回一个估计值而不是一个精确值。在足够的差异下,您可能可以存活数年/数月的时间,但天数不太可能减少它。
  • 时间戳算术是不精确的(除其他事项外,假定月份的长度始终为 30 天......)

您最好的选择是开始使用DAYS(返回自 0001-01-01 以来的天数)。请记住,您最好在 UTC 中执行所有操作,因为它不会考虑 DST。

于 2012-05-08T16:29:12.330 回答