【问题标题】:mysql update HH:MM:SS from an epoch timemysql 从一个纪元时间更新 HH:MM:SS
【发布时间】:2012-10-06 15:30:10
【问题描述】:

我希望对以毫秒为单位的列进行大规模查询更新。对于根据我的 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

【问题讨论】:

    标签: mysql epoch


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 是的,我觉得这样更好。
    • 很好的解决方案,谢谢。我正在走一条更复杂的道路
    【解决方案2】:

    您可以使用 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;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-27
      • 2018-01-17
      • 2016-01-22
      • 2011-12-11
      • 2021-03-16
      • 2013-08-25
      • 2020-07-03
      • 2018-11-24
      相关资源
      最近更新 更多