mysql - Mysql在两列之间查询start_date和end_date
问题描述
我有下表数据。
ID | 开始日期 | 结束日期 |
---|---|---|
1 | 2021-05-03 1:30:01 | 2021-05-03 2:00:01 |
2 | 2021-05-03 2:00:02 | 2021-05-03 2:30:02 |
3 | 2021-05-03 2:30:03 | 2021-05-03 3:00:03 |
4 | 2021-05-03 3:00:03 | 2021-05-03 4:00:03 |
您可以使用以下 sql 重新创建它
CREATE TABLE `test_table` (
`ID` int(11) NOT NULL,
`start_date` datetime NOT NULL,
`end_date` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `test_table` (`ID`, `start_date`, `end_date`) VALUES
(1, '2021-05-03 01:30:01', '2021-05-03 02:00:01'),
(2, '2021-05-03 02:00:02', '2021-05-03 02:30:02'),
(3, '2021-05-03 02:30:03', '2021-05-03 03:00:03'),
(4, '2021-05-03 03:00:03', '2021-05-03 04:00:03');
我需要的是获取 start_date 和 end_date 之间的行。
我可以做一个
select * from test_table
where end_date BETWEEN '2021-05-03 2:30:03' AND '2021-05-03 4:00:00'
结果是
使用上述查询的问题是它不在start_date
and之间end_date
。
所以现在我尝试了
select * from test_table
where start_date >= '2021-05-03 2:30:03' AND end_date <= '2021-05-03 4:00:00'
我对最后一个查询有疑问,因为它没有给我第 3 行和第 4 行。
我想获得第 3 行和第 4 行,因为日期在“2021-05-03 2:30:03”和“2021-05-03 4:00:00”之间。基本上,我需要得到这一行,因为我正在计算时间。
ID | 开始日期 | 结束日期 |
---|---|---|
3 | 2021-05-03 2:30:03 | 2021-05-03 3:00:03 |
4 | 2021-05-03 3:00:03 | 2021-05-03 4:00:03 |
谁能指出我正确的方向?
谢谢你。
解决方案
如果我理解正确,您需要任何与您的区间相交的行。这意味着它们在间隔结束之前开始并在间隔开始之后开始。
BETWEEN
不是正确的逻辑:
select *
from test_table
where start_date < '2021-05-03 4:00:00' and
end_date > '2021-05-03 2:30:03' ;
这是一个 db<>fiddle。
推荐阅读
- ruby-on-rails - 如何在 Ruby on Rails 中从 link_to 调用 js?
- ios - Swift 迁移到 Swift 4.2 后的颜色变化
- node.js - 匹配多种文件类型的更漂亮的 glob
- python - Python3 Pandas - 转换并返回一系列新的价格列
- c - 是什么导致此程序中的分段错误?
- ruby - 使用 rakefile 编译 C 文件
- security - 对于同一个用户,用户请求新token后,JWT的签名有何不同?
- java - 有没有办法使用 java 以编程方式升级 pom.xml 中的依赖版本
- android - 每天使用应用程序创建一个新的 SharedPreferences 对象是个好主意吗?
- prolog - Prolog - 运算符的优先级 - Bratko - 第 3 章