将 db2 日期戳转换为 Unix 时间戳



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

谢谢。

使用 DAYSMIDNIGHT_SECONDSTIMESTAMPDIFF 精确得多:

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

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

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

  • DB2 中的所有时间戳都是"本地时间" - 它们不包含时区信息,并且所有CURRENT_TIMESTAMP写入都基于请求系统认为的时间,而不是主机。
  • 夏令时经常更改。 您需要增加开销来管理转换的开销。
  • TIMESTAMPDIFF函数返回估计值,而不是精确值。 你可能会在足够多的差异中存活数年/数月,但几天不太可能削减它。
  • 时间戳算术是不精确的(除其他外,假设月份的长度总是 30 天......

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

最新更新