首页 > 解决方案 > 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_dateand之间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

谁能指出我正确的方向?

谢谢你。

标签: mysqlsql

解决方案


如果我理解正确,您需要任何与您的区间相交的行。这意味着它们在间隔结束之前开始并在间隔开始之后开始。

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。


推荐阅读