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

标签 mysql

比如你想做一条SELECT语句查询从昨天下午6点到今天上午10点新增的值,会涉及到哪些函数?

一些背景:

我正在开发一个应用程序,人们可以在其中对夜总会的直播进行评分,所以一晚外出的时间跨度通常是从一天的下午 6 点到第二天的晚上 10 点。为了更清楚地想象你要出去,想知道“X”俱乐部或 field 今天是否合适。我正在制作的应用程序会记录俱乐部线路大小的投票,人们是否应该进入等等。因此,如果一个人投票认为你应该得到它(凌晨 0:46),其他人说22pm 的线路很大,这两个信息都应该出现。您只想知道从下午 6 点到第二天上午 10 点之间收到的“X”俱乐部的选票。您不想知道俱乐部“昨天”或上周的表现如何。你想知道这个地方今天的进展情况。很抱歉,如果我感到困惑,我想现在更清楚了。

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

附言我开始认为使用

WHERE DATE(date_added) = CURDATE() 

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

最佳答案

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

关于mysql - 在 mysql 中处理从一天开始到另一天结束的时间间隔的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17366265/

相关文章:

python - Django 数据库查询在比较字符串时给出意外的 'illegal double'

php - 我可以在 PHP 中混合使用 MySQL API 吗?

java - JPA EntityManager 不一致地将对象添加到数据库

PHP 中的 MySQL 查询优化

Mysql select查询,将列数据有条件地分割成2个新列

mysql - 更新信息时插入新记录?

mysql - Mysql 如何从 IN CLAUSE 获取 NULL 值?

python - 将日期时间插入sql

php - Laravel 5.x 如何创建具有外键约束的新用户?

php - 比较 MySQL varchar