修改查询以解决MariaDB中的问题2038

ycl3bljg  于 2023-01-13  发布在  其他
关注(0)|答案(1)|浏览(158)

我有一个SQL查询:

update party set left_time=(next_dose-dose)/power,takeoff=from_unixtime(unix_timestamp()+left_time);

我如何修改它而不使用unix时间来获得比2038-01-19更远的日期?

u59ebvdq

u59ebvdq1#

如果只需要从现在起left_time秒后的UTC时间,只需执行以下操作:

utc_timestamp() + interval left_time second

但这不是from_unixtime所做的;from_unixtime将生成会话所在时区的时间。如果这是您所需要的,您可以简单地这样做

current_timestamp() + interval left_time second

但如果即将进行夏令时过渡,则不会产生正确的结果,因此您必须执行以下操作:

convert_tz(utc_timestamp() + interval left_time second, '+00:00', @@SESSION.time_zone)

(An例如,为什么您应该始终只存储UTC时间,并且只转换它们以供显示。)如果takeoff是时间戳类型而不是日期时间,则必须执行此操作,因为无论何时您读取/更新它,它都会自动转换为会话时区或从会话时区转换,尽管它实际上存储的是UTC时间。

相关问题