【发布时间】:2020-05-24 03:23:31
【问题描述】:
我有下面的表结构,它有日班。
只有 C 班,时间共享两天。
您可以C班次从 20:30 开始,并在接下来的几天 06:00 结束。
Table结构及数据如下
create table `machine_shifts` (
`date` date ,
`shift_start_time` time ,
`shift_end_time` time ,
`shift` varchar (60),
`updated_on` timestamp
);
insert into `machine_shifts` (`date`, `shift_start_time`, `shift_end_time`, `shift`, `updated_on`) values('2010-01-01','06:00:00','14:30:00','A','2020-01-29 15:37:26'),
('2010-01-01','14:30:00','22:30:00','B','2020-01-29 15:37:26'),
('2010-01-01','22:30:00','06:00:00','C','2020-01-29 15:37:26'),
('2010-01-02','06:00:00','14:30:00','A','2020-01-29 15:37:26'),
('2010-01-02','14:30:00','22:30:00','B','2020-01-29 15:37:26'),
('2010-01-02','22:30:00','06:00:00','C','2020-01-29 15:37:26'),
('2010-01-03','06:00:00','14:30:00','A','2020-01-29 15:37:26'),
('2010-01-03','14:30:00','22:30:00','B','2020-01-29 15:37:26'),
('2010-01-03','22:30:00','06:00:00','C','2020-01-29 15:37:26'),
('2010-01-04','06:00:00','14:30:00','A','2020-01-29 15:37:26'),
('2010-01-04','14:30:00','22:30:00','B','2020-01-29 15:37:26'),
('2010-01-04','22:30:00','06:00:00','C','2020-01-29 15:37:27');
数据表示如下
现在我想要的是,我想检索两个给定时间线之间的数据,其中包括来自上述数据集的转变。我有以下查询
SELECT * FROM machine_shifts
WHERE ((CONCAT(`date`, ' ', shift_start_time))
BETWEEN '2010-01-02 00:00:00' AND '2010-01-03 10:00:00')
OR (CONCAT(`date`, ' ', shift_end_time)
BETWEEN '2010-01-02 00:00:00' AND '2010-01-03 10:00:00')
ORDER BY `date`, shift_start_time ASC
在上面提取的结果集中,最后一行不是预期的,也不应该显示我也想在第一行中检索 2010-01-01 的 C 移位,即使我正在传递 2010-01 -02 00:00:00,因为它应该属于 2010-01-01 的 C 班次。
这是我期待的以下结果
我怎样才能实现它?
【问题讨论】:
-
考虑将日期和时间存储为单个实体
标签: mysql sql date datetime select