Mysql SQL查询以查找约会不工作时使用的时间段

Mysql SQL查询以查找约会不工作时使用的时间段,mysql,sql,Mysql,Sql,我正在尝试编写一个SQL查询来查找表中的任何时隙 我的桌子为特定的一天保留了以下预约时段——比如2020年11月1日 StartTime EndTime 09:55 10:55 15:00 16:00 14:00 15:00 13:00 13:30 12:15 16:00 12:00 16:00 我的SQL查询如下: SELECT * FROM dbo.Appointment

我正在尝试编写一个SQL查询来查找表中的任何时隙

我的桌子为特定的一天保留了以下预约时段——比如2020年11月1日

StartTime   EndTime
    09:55   10:55
    15:00   16:00
    14:00   15:00
    13:00   13:30
    12:15   16:00
    12:00   16:00
我的SQL查询如下:

SELECT 
        *
    FROM 
        dbo.Appointment
    WHERE
                AppointmentDate = '01/11/2020'
                AND IsActive = 'True'
                AND
                (CAST(StartTime AS TIME) BETWEEN
                CAST('10:00' AS TIME) AND CAST('11:55' AS TIME)
                AND CAST(EndTime AS TIME) BETWEEN
                CAST('10:00' AS TIME) AND CAST('11:55' AS TIME))
问题是查询返回的行数为零。实际上,它应该返回行
09:55和10:55
,因为此记录在我提供的时间范围内:
10:00-11:55

有人能帮我解决这个问题吗?

如果一个插槽在另一个插槽开始之前结束,或者在另一个插槽结束之后开始,那么它不会与另一个插槽重叠

where '11:55' < StartTime or EndTime < '10:00'
where StartTime < '11:55' and '10:00' < EndTime
其中'11:55'
要查找重叠的插槽。它在另一个开始之后结束,在另一个结束之前开始

where '11:55' < StartTime or EndTime < '10:00'
where StartTime < '11:55' and '10:00' < EndTime
其中开始时间<'11:55'和'10:00'
无需强制转换值,MySQL将为您执行此操作,假设StartTime和EndTime是
time


.

你想找有重叠的插槽吗?@Schwern:是的。然后将这些记录返回给我。编辑以显示所需的结果这就是为什么我使用事件A和事件B进行此描述(即使这些事件是可互换的)@草莓嗯。我注意到您选择的db与标记不匹配。然而,我怀疑这是正确的一个!FWIW,我认为标签是错的,不是你!