我有一個帶有兩列的時間戳和跨度的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))
)
)