我有一张广告表。这些广告包含start
和end
列,这两个列都属于DATETIME
类型。
我需要选择将在接下来的24小时内开始的那些,以及另外将在接下来的24小时内结束的那些。我编写了查询select * from slides where enabled = 1 and start <= NOW() + interval 24 hour
,它似乎最初起作用。
问题是,它还从很久以前选择行。我只需要从现在到现在24小时之间选择一个。
我做错了什么?
答案 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();
将两个代码块作为单个语句一起运行。最终将得到一个结果集,该结果集由两个不同语句的两个单独结果组成。