如何在mariadb/mysql中从datetime开始一分钟?

7eumitmz  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(369)

我正在实现一个聚合统计表,它将包含存储在另一个表中的实时数据的每分钟聚合。要做到这一点,我相信我需要一种方法从一分钟开始 datetime .
e、 g.如果datetime是 dt='2020-06-08 21:20:33' ,我需要一个函数 F(dt)='2020-06-08 21:20:00' ,这样我就可以打开它了 NOW() 在查询中。
到目前为止,由于datetime字符串datetime route,我可以想到以下可能比较慢的方法:

SELECT STR_TO_DATE(DATE_FORMAT(NOW(), '%Y%m%d%H%i00'), '%Y%m%d%H%i%S') AS MinuteBeginning

你能帮我找到一个更有效的解决方案吗,也许是一个存储过程?如果mysql解决方案不同于mariadb,则后者是首选方案。

pod7payv

pod7payv1#

如果y2038是一个问题,字符串操作是另一个选择:

select now(), CONCAT(LEFT(NOW(), 17), '00');
+---------------------+-------------------------------+
| now()               | CONCAT(LEFT(NOW(), 17), '00') |
+---------------------+-------------------------------+
| 2020-06-08 23:24:59 | 2020-06-08 23:24:00           |
+---------------------+-------------------------------+
h79rfbju

h79rfbju2#

您还可以使用unix时代:

from_unixtime(floor(unix_timestamp() / 60) * 60)

整数运算应该快一点。不过,在聚合查询中,数据洗牌通常比其他操作要昂贵得多。

相关问题