如何在MySQL查询中检查是否等于或在X天内?

时间:2011-05-14 14:34:56

标签: mysql where unix-timestamp

我有一个名为submit_timestamp的列,其中包含UNIX_TIMESTAMP(),我现在要做的是执行SELECT查询,并在WHERE子句中确保{ {1}}等于或在X天内。

(仅限演示目的):

submit_timestamp

所有帮助表示赞赏。

感谢。

2 个答案:

答案 0 :(得分:2)

在构造查询之前,计算要在应用程序中进行两次比较的次数。所有编程语言都有一个函数来为您提供当前时间戳(即PHP中的time())。要获得“从现在起X天”,请在时间戳中添加60 * 60 * 24 * X秒。

SELECT id
FROM   submissions
WHERE  submit_timestamp >= $THE_CURRENT_TIMESTAMP
       AND submit_timestamp <= ($THE_CURRENT_TIMESTAMP + 60*60*24*X)
       AND id = 2  

现在你只是比较整数。与Johan的解决方案不同,MySQL将能够使用列上的索引进行比较。

答案 1 :(得分:1)

SELECT id 
FROM submissions 
WHERE FROM_UNIXTIME(submit_timestamp) 
  BETWEEN NOW() AND DATE_ADD(NOW(),INTERVAL 2 DAY)
  AND id = 2;

A BETWEEN B AND C A >= B AND A <= C 它只是更好地传达意图:-)

请参阅:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_from-unixtime

修改 甚至更好:

SELECT id 
FROM submissions 
WHERE submit_timestamp BETWEEN UNIXTIMESTAMP() 
  AND unixtimestamp(DATE_ADD(NOW(),INTERVAL 2 DAY))
  AND id = 2;

正如Dan正确解释的那样,这允许MySQL使用submit_timestamp上的索引,上面的代码没有。

请注意,没有参数的UNIXTIMESTAMP()会返回UNIXTIMESTAMP(NOW())
请参阅:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_unix-timestamp