mysql - SQL - 检查是否存在重叠的工作时间
问题描述
我有以下数据库模式(天值0=mon,1=tue,2=wed
等)
以及以下输入
{
"day": 3,
"start_time": "15:00",
"end_time": "17:30"
},
{
"day": 5
"start_time": "08:00",
"end_time": "12:00"
}
我想查找输入值是否包含数据库中的任何重叠记录。(请注意,在我的情况下,我可以在某一天有多个 start_time、end_time)
这是我尝试过的。
SELECT
COUNT(id) AS total_count
FROM
working_hour
WHERE (
(day = 3 AND (start_time <= '15:00' AND end_time >= '17:30')) ||
(day = 5 AND (start_time <= '08:00' AND end_time >= '12:00'))
) AND user_id = 1;
0
这将返回我所期望的总计数,1
因为day = 3
我们有一个匹配的重叠记录与 id5
我在哪里错了?
谢谢你。
解决方案
我相信你想要的逻辑是:
SELECT COUNT(*) AS total_count
FROM working_hour
WHERE user_id = 1 AND
((day = 3 AND start_time <= '17:30' AND end_time >= '15:00') OR
(day = 5 AND start_time <= '12:00' AND end_time >= '8:00')
) ;
推荐阅读
- android - Android / Google Map:位置更改重置缩放和方位
- postgresql - 使用连接索引
- swift - BigSur 下 Swift 中的 NSWorkspace.shared.openApplication 问题
- javascript - 格式化日期 netlify cms 不会改变
- python - 未找到 Web 元素,但在手动检查时出现
- c - **.h: 在 dec c++ 中编译 C 时没有这样的文件或目录
- angular - 所选项目不变
- python - PYPI 包已上传,但无法安装或找到 pip
- javascript - AFrame:重新设置元素保持其世界位置,旋转
- amazon-web-services - 如何在 Fargate 上调试因调度失败而陷入挂起状态的容器?