例如,如果您想生成SELECT语句来查询从昨天下午6点到今天上午10点添加的值,那么将涉及哪些函数?
一些背景:
我正在制作一个应用程序,人们可以在该应用程序中对夜总会进行现场评分,因此一晚外出的时间跨度通常是从一天下午6点到第二天晚上10点。更清楚地说,想象一下你要出去,想知道"X"俱乐部或场地今天是否好。我正在制作的应用程序会登记俱乐部队伍大小的投票,人们是否应该加入,等等。。所以,如果一个人投票说你应该得到它(在凌晨0:46),而另一个人在晚上22点说队伍很大,这两个信息都应该出现。你只想知道"X"俱乐部在下午6点到第二天上午10点之间收到的选票。你不想知道俱乐部昨天或上周的情况。你想知道这个地方今天过得怎么样。很抱歉,如果我弄糊涂了,我想现在已经清楚了。
那么,你如何处理从一天开始到另一天结束的间隔呢?
附言:我开始认为使用
WHERE DATE(date_added) = CURDATE()
而且它的变体不是一个好方法,因为第二天会打乱所涉及的逻辑。(我的日期列是date_aded)
我认为您的date_added是时间戳或日期时间。
SELECT * FROM yourTable
WHERE date_added BETWEEN DATE_FORMAT(CURDATE(), '%Y-%m-%d 22:00:00')
AND DATE_FORMAT(CURDATE() + INTERVAL 1 DAY, '%Y-%m-%d 10:00:00')
编辑:
你的意思是这样的吗?
SELECT * FROM yourTable
WHERE date_added BETWEEN CASE WHEN TIME(NOW()) BETWEEN '22:00:00' AND '23:59:59' THEN DATE_FORMAT(CURDATE(), '%Y-%m-%d 22:00:00')
WHEN TIME(NOW()) BETWEEN '00:00:00' AND '10:00:00' THEN DATE_FORMAT(CURDATE() - INTERVAL 1 DAY, '%Y-%m-%d 22:00:00')
ELSE NULL
END
AND CASE WHEN TIME(NOW()) BETWEEN '22:00:00' AND '23:59:59' THEN DATE_FORMAT(CURDATE() + INTERVAL 1 DAY, '%Y-%m-%d 10:00:00')
WHEN TIME(NOW()) BETWEEN '00:00:00' AND '10:00:00' THEN DATE_FORMAT(CURDATE(), '%Y-%m-%d 10:00:00')
ELSE NULL
END
当查询未在时间范围内激发时,结果为NULL。
您可以使用BETWEEN
查询:
SELECT * FROM your_table
WHERE date_added BETWEEN '2013-06-27 18:00:00' and '2013-06-28 22:00:00'
如果您关心时间的话,您有一个StartTime
和EndTime
列。找到现在发生的事情:
where now() between StartTime and EndTime
如果你想知道某个特定日期发生了什么:
where @THEDATE between date(StartTime) and date(EndTime)
关于between
的日期/时间提醒。当您比较时间和时间(第一个示例)或日期和日期(第二个示例)时,它会按预期工作。在比较时间和日期(未显示)时,它可能无法满足您的要求。