1

例如,如果您想创建一个 SELECT 语句来查询从昨天下午 6 点到今天上午 10 点添加的值,将涉及哪些函数?

一些背景:

我正在制作一个人们对夜总会生活进行评分的应用程序,因此一晚的时间跨度通常是从一天下午 6 点到第二天晚上 10 点。为了更清楚地想象你要出去,想知道“X”俱乐部或场地今天是否很好。我正在制作的应用程序会记录俱乐部排队人数的投票,人们是否应该进入等等。所以,如果一个人投票你应该得到它(早上 0:46),其他人说下午 22 点这条线非常大,这两个信息都应该出现。您只想知道从下午 6 点到次日上午 10 点之间获得的“X”俱乐部选票。你不想知道俱乐部“昨天”或上周的情况。你想知道这个地方今天的情况。如果我感到困惑,我很抱歉,我想现在它更清楚了。

那么,您如何处理从一天开始到另一天结束的时间间隔?

PS我开始认为使用

WHERE DATE(date_added) = CURDATE() 

它的变体不是一个好方法,因为第二天会弄乱所涉及的逻辑。(我的日期栏是 date_added)

4

3 回答 3

1

我假设您的 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。

于 2013-06-28T13:56:22.733 回答
1

您可以使用BETWEEN查询:

SELECT * FROM your_table 
WHERE date_added BETWEEN '2013-06-27 18:00:00' and '2013-06-28 22:00:00'
于 2013-06-28T13:57:49.323 回答
0

如果你关心时代,你有一个StartTime和专栏。EndTime要查找现在正在发生的事情:

where now() between StartTime and EndTime

如果您想知道特定日期发生了什么:

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

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

于 2013-06-28T13:56:33.243 回答