如何在PostgreSQL中检查某个事件小时数是否在小时数范围内?

如何在PostgreSQL中检查某个事件小时数是否在小时数范围内?,postgresql,time,overlap,between,Postgresql,Time,Overlap,Between,我有一个这样的轮班表(简化) 我有报警事件(时间戳),我需要对照轮班进行检查 例如,如果报警事件发生在14:34小时,则分配班次1;如果事件发生在23:20小时,则分配班次3,依此类推 我的第一个方法是这样的: SELECT id FROM shifts WHERE hr_start < '09:23:00':TIME AND hr_end > '09:23:00':TIME; SELECT id FROM shifts WHERE '09:23:00':TIME BETW

我有一个这样的轮班表(简化)

我有报警事件(时间戳),我需要对照轮班进行检查

例如,如果报警事件发生在14:34小时,则分配班次1;如果事件发生在23:20小时,则分配班次3,依此类推

我的第一个方法是这样的:

SELECT id 
FROM shifts 
WHERE hr_start < '09:23:00':TIME AND hr_end > '09:23:00':TIME;
SELECT id 
FROM shifts 
WHERE '09:23:00':TIME BETWEEN r_start AND hr_end;
同样的结果

如何检索发生在22:00到03:59之间的事件的ID=3记录?


在以下情况下使用用例:

SELECT id 
FROM shifts
CROSS JOIN (SELECT '23:00:00'::TIME AS event) sub
WHERE 
    CASE WHEN hr_start <= hr_end THEN hr_start <= event AND hr_end >= event
    ELSE hr_start <= event OR hr_end >= event END;
选择id
轮班
交叉连接(选择“23:00:00”::时间作为事件)子节点
哪里
hr_启动时的情况
SELECT id 
FROM shifts
CROSS JOIN (SELECT '23:00:00'::TIME AS event) sub
WHERE 
    CASE WHEN hr_start <= hr_end THEN hr_start <= event AND hr_end >= event
    ELSE hr_start <= event OR hr_end >= event END;