将DB2日期时间戳转换为Unix时间戳。

4

如何在DB2中将2012-04-12 00:00:00转换为Unix时间戳?是否有内置的SQL函数可用?

谢谢。

2个回答

5

使用 DAYSMIDNIGHT_SECONDS 比使用 TIMESTAMPDIFF 更加准确:

SELECT
86400*(DAYS(CURRENT TIMESTAMP - CURRENT TIMEZONE)-DAYS('1970-01-01'))
+ MIDNIGHT_SECONDS(CURRENT TIMESTAMP - CURRENT TIMEZONE)
"UNIX_TIMESTAMP"
FROM SYSIBM.SYSDUMMY1

3

我猜你指的是Unix时间戳是指自1970年01月01日00:00:00 UTC(协调世界时)以来的秒数(或其他单位)。但在DB2(截至V6R1)中没有内置的功能可以实现此操作。

同时存在以下问题:

  • DB2中的所有时间戳都是“本地时间” - 它们不包含时区信息,而所有CURRENT_TIMESTAMP写入都基于请求系统认为的时间,而不是主机时间。
  • 夏令时频繁更改。您需要添加管理此转换的开销。
  • TIMESTAMPDIFF函数返回估计值,而不是精确值。对于足够的差异,您可能可以在年/月持续时间上使用它,但天数不太可能。
  • 时间戳算术不精确(除其他事项外,假定月份始终为30天...)

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接