一尘不染

使用Unix时间戳在最近5分钟内选择行

sql

Iam试图弄清楚数据是在大约5分钟内保存到数据库的。

SELECT COUNT(id), DATE_FORMAT(`timestamp`, '%Y-%m-%d %H:%i')
FROM `table`
WHERE `timestamp` >= CURRENT_TIMESTAMP - INTERVAL 5 MINUTE

timestamp 是Unix时间戳(1970年以来的毫秒)。

不起作用,我得到nullnum_rows而不是0,如果我使用

if (!isset($resultHistory->num_rows) || !$resultHistory->num_rows)

要执行操作,代码不会进入循环。

我也试过了

SELECT COUNT(id), DATE_FORMAT(`timestamp`, '%Y-%m-%d %H:%i')
    FROM `table`
    WHERE DATE_FORMAT(`timestamp`, '%Y-%m-%d %H:%i') >= CURRENT_TIMESTAMP - INTERVAL 5 MINUTE

阅读 220

收藏
2021-03-10

共1个答案

一尘不染

Current_timestamp以SQL
TIMESTAMP(而不是UNIX时间戳)的形式返回当前日期,因此您必须使用unix_timestamp函数进行转换:

SELECT COUNT(id), from_unixtime(`timestamp` / 1000, '%Y-%m-%d %H:%i')
FROM `table`
WHERE `timestamp` >= unix_timestamp(CURRENT_TIMESTAMP - INTERVAL 5 MINUTE) * 1000

编辑:

由于您的timestamp列中包含Unix时间,因此您还必须使用from_unixtime设置日期格式。

编辑2:

在MySQL UNIX中,时间是自纪元(1/1/70)起的秒数,因此,如果您的timestamp列包含毫秒数,则也必须除以1000。

2021-03-10