mysql - 我如何选择上个月的时间间隔?,它也必须在上个月最后一天的下午 1 点到实际当天的中午之间
问题描述
我已经尝试解决这个问题几个小时了,到目前为止我所达到的是这样的:
SELECT * FROM mytable WHERE DATE(datetime_column)
BETWEEN DATE_SUB(DATE_FORMAT(NOW(),'%Y-%M-01'),INTERVAL 1 DAY) AND NOW()
AND HOUR(datetime_column) > = '13'
ORDER BY
datetime_column
除了天间隔,我还需要从上个月的最后一天到当前日期的中午 13 点之间的小时间隔。
小提琴似乎不适用于当前查询,但它在我的数据库中工作,但请查看小提琴以获取更多信息:
https://www.db-fiddle.com/f/a3jui7aPMevU81Cka4BqXg/0
和样本数据:
CREATE TABLE mytable (
id INT,
datetime_column DATETIME
);
INSERT INTO mytable (id,datetime_column) VALUES
(1,'2020-03-31 08:00:00'),
(2,'2020-03-31 13:00:00'),
(3,'2020-04-02 14:30:00'),
(4,'2020-04-06 18:00:00'),
(5,'2020-04-21 05:00:00'),
(6,'2020-04-23 13:00:00'),
(7,'2020-04-23 14:00:00');
如果需要更多信息,请告诉我。
解决方案
我想这就是你想要的
SELECT * FROM mytable
WHERE (
DATE(datetime_column) > LAST_DAY(CURDATE() - INTERVAL 1 MONTH)
AND datetime_column < (CURDATE() + INTERVAL 12 HOUR)
)
OR (
DATE(datetime_column) = LAST_DAY(CURDATE() - INTERVAL 1 MONTH)
AND HOUR(datetime_column) >= 13
);
+------+---------------------+
| id | datetime_column |
+------+---------------------+
| 2 | 2020-03-31 13:00:00 |
| 3 | 2020-04-02 14:30:00 |
| 4 | 2020-04-06 18:00:00 |
| 5 | 2020-04-21 05:00:00 |
+------+---------------------+
2 行(0.00 秒)
这里LAST_DAY(CURDATE() - INTERVAL 1 MONTH)
给出了上个月的最后一天。
并datetime_column < (CURDATE() + INTERVAL 12 HOUR)
测试该时间是否在今天中午之前。
推荐阅读
- css - 从primeng表中的上下文菜单事件中获取列索引
- reactjs - 不允许 ReactRadioButtonGroup 选择
- python - 在 C++ 文件中编译 PYBIND11_MODULE 后的下一步是什么
- azure-devops - 天蓝色管道中的 Azure 工件提要标识符
- powershell - 捕获在远程服务器上运行的 powershell cmdlet 的详细输出
- sas - 使用 SAS 宏创建多个列
- kotlin - Kotlin 中 Let 和 Use 函数的区别
- android - 将完整文件夹复制到android 10中的另一个文件夹
- spring-boot - 如果在过去 24 小时内未发出请求,为什么我的谷歌云运行服务处于非活动状态?
- c++ - 树查询与操作