mysql更新HH:MM:SS从纪元时间开始

时间:2012-10-16 13:53:42

标签: mysql epoch

我正在寻找对来自epoch的ms的列进行批量查询更新。对于根据我的where子句返回的每一行,我想将时间值更新为传入的内容,并将其保存为ms。我的更新条款需要什么样?

例如,我有两行

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

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

现在我要设置两个时间,比如07:00:00,但保留日期。因此更新语句的结果应如下所示:

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

对应于Sun,08 Aug 2010 07:00:00 UTC和Sun,09 Sep 2012 07:00:00 UTC

2 个答案:

答案 0 :(得分: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;

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

答案 1 :(得分:0)

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

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

MY_TIMESTAMP - (MY_TIMESTAMP % 86400000)为您提供没有时间的日期

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