我有一个带有两列的时间戳和跨度的MYSQL表。时间戳是一个unix时间戳,而span是一个整数。从unix中选择时间范围-timestamp
我想选择时间戳在当前时间+ - 跨度一半之间的所有行。
例如,如果当前时间是23:00,那么我希望时间戳记的时间在21到01之间的所有行。问题是,所有时间戳都来自不同的日子。
为了澄清,我不关心日期仅
,我想出了一个办法做到这一点的时间,但它似乎像这样的黑客。我敢肯定,有更多MYSQL知识的人可以让我看到一个更漂亮的方法来做到这一点。
SELECT *
FROM table
WHERE (
TIME(DATE_SUB(CURDATE() , INTERVAL(span /2) HOUR)) <= TIME(DATE_ADD(CURDATE() , INTERVAL(span /2) HOUR))
AND (
TIME(FROM_UNIXTIME(timestamp)) >= TIME(DATE_SUB(CURDATE() , INTERVAL(span /2) HOUR))
AND TIME(FROM_UNIXTIME(timestamp)) <= TIME(DATE_ADD(CURDATE() , INTERVAL(span /2) HOUR))
)
)
OR (
TIME(DATE_SUB(CURDATE() , INTERVAL(span /2) HOUR)) >= TIME(DATE_ADD(CURDATE() , INTERVAL(span /2) HOUR))
AND (
TIME(FROM_UNIXTIME(timestamp)) >= TIME(DATE_SUB(CURDATE() , INTERVAL(span /2) HOUR))
OR TIME(FROM_UNIXTIME(timestamp)) <= TIME(DATE_ADD(CURDATE() , INTERVAL(span /2) HOUR))
)
)