0

我希望对以毫秒为单位的列进行大规模查询更新。对于根据我的 where 子句返回的每一行,我想将时间值更新为传入的内容,并将其仍存储在 ms 中。我的更新子句需要是什么样的?

例如,我有两行

MY_TIMESTAMP  | VALUE
----------------------
1281275302000 | some val 1
1347198502000 | some val 2

第 1 行对应于周日,2010 年 8 月 8 日 13:48:22 UTC 第 2 行对应于周日,2012 年 9 月 9 日 13:48:22 UTC

现在我想设置两个时间,比如 07:00:00,但保持日期不变。所以更新语句的结果应该是这样的:

MY_TIMESTAMP  | VALUE
----------------------
1281250800000 | some val 1
1347174000000 | some val 2

对应于 2010 年 8 月 8 日星期日 07:00:00 UTC 和 2012 年 9 月 9 日星期日 07:00:00 UTC

4

2 回答 2

0

您可以使用 FROM_UNIXTIME 执行此操作:

UPDATE MY_TABLE
  SET MY_TIMESTAMP = (UNIX_TIMESTAMP(TIMESTAMP(DATE(FROM_UNIXTIME(MY_TIMESTAMP / 1000 + 14400)), '07:00:00')) - 14400) * 1000;

通过此选择测试它是否为您提供正确的结果:

SELECT (UNIX_TIMESTAMP(TIMESTAMP(DATE(FROM_UNIXTIME(MY_TIMESTAMP / 1000 + 14400)), '07:00:00')) - 14400) * 1000 
   FROM MY_TABLE LIMIT 100;

PS 14400 对应于我与 UTC 的偏移量(以秒为单位)。如果您的不同,请更改它。

于 2012-10-16T14:19:44.927 回答
0

应该可以只用简单的数学,以避免任何时区考虑:

UPDATE MY_TABLE
SET MY_TIMESTAMP = MY_TIMESTAMP - (MY_TIMESTAMP % 86400000) + 25200000

MY_TIMESTAMP - (MY_TIMESTAMP % 86400000)给你没有时间的日期

25200000等于 7 小时(以毫秒为单位)。

于 2012-10-16T14:37:14.750 回答