我正在寻找对来自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
答案 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小时(以毫秒为单位)。