我有一个带有BIGINT列(DT)的表(MYTABLE),用于存储时间戳。我发现这些还包含我的用户的本地时区。 我希望在下次数据库升级时从这些值中删除时区,以便这些时间戳为UNIX纪元。
我应该考虑哪些SQL查询(对于GMT + 3查询示例)?
UPDATE `MYTABLE` SET `DT` = `DT` - (3 * 3600000)
这样可以吗?
我还需要为毫秒等于零的日期值运行此UPDATE。我应该将DT
转换为子字符串并查找最后3个字符为零吗?什么是正确的方法?
答案 0 :(得分:0)
如果您的数据类型是BIGINT,那么我必须假设您已将日期值存储为纪元时间。假设您从java.util.Date' getTime()
方法或System.currentTimeInMillis()
获得了该值,您的数据库似乎不会包含java.util.Date
和{{的时区信息1}}两者都是时区无关的。
看起来更像是显示问题,您需要确保在正确的时区显示日期值。
Look at version of SimpleDateFormat
constructor that accepts Locale
as parameter.
答案 1 :(得分:0)
我想出了这个sql语句:
UPDATE `MYTABLE` SET `DT` = `DT` - ? WHERE substr(CAST(`DT` AS TEXT), -3) = '000'
其中?
是用Java计算的外部变量,包含以毫秒为单位的时区
请有人确认这是否正常