选择时间戳设置为将来的行

时间:2016-05-03 11:17:24

标签: mysql sql

我有一张广告表。这些广告包含startend列,这两个列都属于DATETIME类型。

我需要选择将在接下来的24小时内开始的那些,以及另外将在接下来的24小时内结束的那些。我编写了查询select * from slides where enabled = 1 and start <= NOW() + interval 24 hour,它似乎最初起作用。

问题是,它还从很久以前选择行。我只需要从现在到现在24小时之间选择一个。

我做错了什么?

3 个答案:

答案 0 :(得分:2)

这适用于oracle,你可以根据你正在使用的数据库进行修改

select * from slides where enabled = 1 and start between sysdate and sysdate+1

这里sysdate返回当前日期和时间,添加1会从现在起24小时后返回日期和时间。

答案 1 :(得分:1)

所以,使用两个比较:

select s.*
from slides s
where s.enabled = 1 and
      s.start <= NOW() + interval 24 hour and
      s.start >= NOW();

答案 2 :(得分:1)

我有SQL Server背景,但对MySQL的特殊性进行了一些研究。

  

我需要选择将在接下来的24小时内开始的那些

/*This will provide you all that start in next 24 hours*/
SELECT S.* FROM Slides S WHERE S.Enabled = 1 AND S.Start <= NOW() + interval 24 hour AND
  S.Start >= NOW();
  

,另外,将在接下来的24小时内结束

        /* This will separately select the ones that are going to end in the next 24 */
    hours.
UNION 
        SELECT S.* FROM Slides S WHERE S.Enabled = 1 AND S.END <= NOW() + interval 24 hour AND
  S.End>= NOW();

将两个代码块作为单个语句一起运行。最终将得到一个结果集,该结果集由两个不同语句的两个单独结果组成。