如何解决如何在时间范围内和不在时间范围内选择
我有员工。现在是上午 9:30。我想选择现在正在工作的每个人。然后在单独的sql语句中,我想选择现在不工作的每个人。我怎样才能做到这一点?我无法理解逻辑。我故意使用了 time
字段而不是 datetime
。
我的带有示例数据的表格
CREATE TABLE shifts (
id int unsigned
AUTO_INCREMENT
PRIMARY KEY,name varchar(64)
NOT NULL,start_time time
NOT NULL,end_time time
NOT NULL
);
INSERT INTO shifts (id,name,start_time,end_time) VALUES
(1,'Bob','09:00:00','17:00:00'),(2,'Jack','09:30:00','14:00:00'),(3,'Bill','15:00:00','03:00:00'),(4,'James','23:30:00','10:00:00'),(5,'Sarah','14:30:00','21:00:00'),(6,'Marry','03:00:00','09:30:00');
正在工作的人:
姓名 |
---|
鲍勃 |
杰克 |
詹姆斯 |
不工作的人:
姓名 |
---|
账单 |
莎拉 |
结婚 |
我无法理解它,我对正在工作的人的尝试是错误的,但是...:
SELECT name
FROM shifts
WHERE start_time <= '09:30:00' AND
end_time >= '09:30:00';
解决方法
您可以选择现在正在工作的每个人:
select s.*
from shifts s
where (start_time < end_time and '09:30:00' >= start_time and '09:30:00' < end_time) or
(start_time > end_time and ('09:30:00' >= start_time or '09:30:00' < end_time));
对于不工作的员工,您使用类似的逻辑。最简单的方法是:
select s.*
from shifts s
where not ((start_time < end_time and '09:30:00' >= start_time and '09:30:00' < end_time) or
(start_time > end_time and ('09:30:00' >= start_time or '09:30:00' < end_time))
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。