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

我在哪里错了?

谢谢你。

标签: mysqlsql

解决方案


我相信你想要的逻辑是:

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')
      ) ;

推荐阅读