0

我有一个带有 BIGINT 列 (DT) 的表 (MYTABLE),用于存储时间戳。我发现这些也包含我用户的本地时区。我想在下一次数据库升级中从这些值中删除时区,以便这些时间戳将是 UNIX 纪元。

我应该考虑什么 SQL 查询(对于 GMT + 3 查询示例)?

UPDATE `MYTABLE` SET `DT` = `DT` - (3 * 3600000)

这个可以吗?

我还需要为毫秒为零的日期值运行此更新。我应该转换DT为子字符串并查找最后 3 个字符为零吗?什么是正确的方法?

4

2 回答 2

0

如果您的数据类型是 BIGINT,那么我将不得不假设您已经将日期值存储为纪元时间。假设您从 java.util.Date 的getTime()方法或从中获得该值System.currentTimeInMillis(),您的数据库似乎将不包含时区信息,因为java.util.Date它们System.currentTimeInMillis()都是独立于时区的。

看起来更像是显示问题,您需要确保在正确的时区显示日期值。

查看SimpleDateFormat接受Locale作为参数的构造函数的版本。

于 2013-07-14T17:45:53.160 回答
0

我想出了这个sql语句:

UPDATE `MYTABLE` SET `DT` = `DT` - ? WHERE substr(CAST(`DT` AS TEXT), -3) = '000'

其中?是用 Java 计算的外部变量,其中包含以毫秒为单位的时区

请有人确认这是否可以

于 2013-07-14T19:21:40.717 回答