【发布时间】:2015-07-26 08:58:09
【问题描述】:
我有一张这样的轮班表(简化版)
id | hr_start | hr_end
----+----------+----------
1 | 08:00:00 | 15:59:59
2 | 16:00:00 | 21:59:59
3 | 22:00:00 | 03:59:59
4 | 04:00:00 | 07:59:59
我有需要检查轮班的警报事件(时间戳)。
例如,如果警报事件发生在 14:34,则分配班次 1,如果事件发生在 23:20,则分配班次 3,依此类推。
我的第一个方法是这样的:
SELECT id
FROM shifts
WHERE hr_start < '09:23:00':TIME AND hr_end > '09:23:00':TIME;
是的,这适用于 id 1,2 和 4,但不是 3。
然后我尝试这样的 BETWEEN 查询:
SELECT id
FROM shifts
WHERE '09:23:00':TIME BETWEEN r_start AND hr_end;
结果相同
如何检索 22:00 到 03:59 范围内发生的事件的 ID = 3 记录?
【问题讨论】:
标签: postgresql time overlap between