UNIX未来mysql的时间戳

时间:2015-09-12 16:22:21

标签: mysql unix

我有一个表格,其中包含将来的几个UNIX时间戳,我需要找到比NOW()更早或者在过去10分钟内的时间戳。

这是我尝试使用的查询无效

SELECT 
    TIME_TO_SEC(TIMEDIFF(NOW(), FROM_UNIXTIME(`expires`))) AS `time_diff` 
FROM 
    `video_table`
WHERE
    time_diff < NOW() OR time_diff > '-600'

有人能指出我为什么不起作用的方向吗?

5 个答案:

答案 0 :(得分:1)

time_diff会为您提供NOW()expires列之间的区别。你想要的是实际检查NOW()&lt; expirestime_diff&lt; 0)或者它是否(NOW()+ 600s&lt; expires)(time_diff&lt; ; 600)。所以足以检查后者:

SELECT 
    TIME_TO_SEC(TIMEDIFF(NOW(), FROM_UNIXTIME(`expires`))) AS `time_diff` 
FROM 
    `video_table`
HAVING
    `time_diff` < 600

答案 1 :(得分:1)

问题不太清楚,但我想尝试回答一些情况。

此查询将返回已过期的所有记录:

SELECT * FROM video_table WHERE expires < UNIX_TIMESTAMP()

这将返回所有即将过期的记录(它们将在10分钟后过期):

SELECT * FROM video_table
WHERE expires>=UNIX_TIMESTAMP() AND expires<UNIX_TIMESTAMP() + 600

这将返回将来的所有记录(它们将在10分钟后过期):

SELECT * FROM video_table WHERE expires>UNIX_TIMESTAMP() + 600

答案 2 :(得分:0)

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,expires INT NOT NULL);

INSERT INTO my_table(expires) VALUES
(1442075399), 
(1442075499), 
(1442075599), 
(1442075699), 
(1442076106),
(1442076206),
(1442076306),
(1442076406);

SELECT UNIX_TIMESTAMP();
+------------------+
| UNIX_TIMESTAMP() |
+------------------+
|       1442075727 |
+------------------+

SELECT * FROM my_table WHERE expires - 600 < UNIX_TIMESTAMP();
+----+------------+
| id | expires    |
+----+------------+
|  1 | 1442075399 |
|  2 | 1442075499 |
|  3 | 1442075599 |
|  4 | 1442075699 |
|  5 | 1442076106 |
|  6 | 1442076206 |
|  7 | 1442076306 |
+----+------------+

答案 3 :(得分:0)

您可以使用DATE_ADD来获取未来的时间:

SELECT UNIX_TIMESTAMP() - `expires` AS `time_diff` 
FROM `video_table`
WHERE expires < UNIX_TIMESTAMP(DATE_ADD(NOW(), INTERVAL 10 MINUTE))

答案 4 :(得分:0)

我不太确定我理解你要做什么,如果你创建一个给出当前时间的变量,而不是将你的查询作为一个小于或等于它应该工作的子句运行。  这是一个例子

$t=time();

SELECT * FROM video_table
WHERE column_holding_unix_time<=$t;

我希望这会有所帮助