【问题标题】:Round up a mysql utc_timestamp to the next five minute block将 mysql utc_timestamp 向上舍入到下一个五分钟块
【发布时间】:2010-11-11 16:28:51
【问题描述】:

我需要从获取UTC当前时间的结果中找到下一个(分钟可被5整除):00,让我解释一下......

我用的

SELECT UTC_TIMESTAMP()

MySql 中的函数,返回“2010-11-11 16:26:19”。

然后我想将此值转换为“2010-11-11 16:30:00”,最好只使用 MySql,或者 MySql 和 PHP 的组合。

干杯!

【问题讨论】:

    标签: mysql datetime timestamp


    【解决方案1】:
    MsSQL:
    DATEADD(second, (60 - DATEPART(second, Last_Updated)) + ((5 - (DATEPART(minute, Last_Updated) % 5)) * 60) - 60, Last_Updated)
    MySQL:
    SELECT DATE_ADD(UTC_TIMESTAMP(), INTERVAL ((60 - SECOND(UTC_TIMESTAMP())) + ((5 - (MINUTE(UTC_TIMESTAMP()) % 5)) * 60) - 60) SECOND);
    

    将“Last_Updated”替换为您要转换的值,但这会发现从 5:00 到下一个 5 分钟间隔的任何内容。

    2010-10-26 18:04:07.000 2010-10-26 18:05:00.000
    2010-11-10 17:18:59.000 2010-11-10 17:20:00.000
    2010-11-10 20:59:27.000 2010-11-10 21:00:00.000
    2010-11-10 20:59:46.000 2010-11-10 21:00:00.000
    2010-11-11 12:00:51.000 2010-11-11 12:05:00.000
    2010-11-11 12:30:59.000 2010-11-11 12:35:00.000
    

    这些是我最终针对数据库测试的结果。

    编辑忘记包含 MySQL 版本,哎呀。还保留了 MsSQL 版本,以防其他人在此过程中感到好奇。

    【讨论】:

      【解决方案2】:

      编辑:我不是 MySQL 用户...我会留下必需品,其他人可能会用它做更多事情。

      SELECT UTC_TIMESTAMP() + 300 - UNIX_TIMESTAMP() % 300;
      

      编辑:我只是重写了上面的内容以在 MySQL 中工作:

      SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(UTC_TIMESTAMP()) 
      + 300 - (UNIX_TIMESTAMP(UTC_TIMESTAMP()) % 300));
      

      我不认为这正是 OP 想要的,因为当时间可以被 5 分钟整除时,它也会向上取整 5 分钟。例如,14:45:00 会四舍五入到 14:50:00,这是错误的。但这是朝着正确方向迈出的一步。

      【讨论】:

      • 呃,你为什么要打破它 Hammerite?
      【解决方案3】:

      我会将 UNIX_TIMESTAMP() 和 FROM_UNIXTIME() 与 ROUND() 结合使用。

      所以最近的 5 分钟边界是:

      select now(),from_unixtime(300 * round(unix_timestamp(now())/300));
      
      +---------------------+-------------------------------------------------------+
      | now()               | from_unixtime(300 * round(unix_timestamp(now())/300)) |
      +---------------------+-------------------------------------------------------+
      | 2011-04-23 09:20:35 | 2011-04-23 09:20:00                                   | 
      +---------------------+-------------------------------------------------------+
      

      使用 unix 时间,您可以在几秒钟内完成工作。最近 10 秒除以 10,四舍五入然后乘以 10。

      最近的分钟 - 使用 60 最近的时间 - 使用 3600

      你明白了。

      【讨论】:

      • 我遇到了一个不同的问题,这很有帮助。谢谢!
      • 这不对,OP 想向上舍入到最接近的 5 分钟标记,而不是简单地舍入
      • 将要四舍五入的总金额的一半 (150) 添加到 unix_timestamp(now())。这样,它总是会“四舍五入”
      猜你喜欢
      • 2013-07-15
      • 2013-10-17
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多