在 mysql 中处理一天开始并在另一天结束的时间间隔的好方法是什么?



例如,如果您想生成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'

如果您关心时间的话,您有一个StartTimeEndTime列。找到现在发生的事情:

where now() between StartTime and EndTime

如果你想知道某个特定日期发生了什么:

where @THEDATE between date(StartTime) and date(EndTime)

关于between的日期/时间提醒。当您比较时间和时间(第一个示例)或日期和日期(第二个示例)时,它会按预期工作。在比较时间和日期(未显示)时,它可能无法满足您的要求。

相关内容

最新更新