Postgresql使用时间范围,而不是datetime范围



请告诉我如何在Postgresql中实现简单的时间范围工作。我想执行如下查询:

SELECT user_id 
FROM user_logs 
WHERE login_time_range BETWEEN '20:00' AND '02:00'

注意,我不是在寻找datetime类型。我也知道tsrange也不适合我的需要。

在上面的查询中,我想将login_time_range存储为开始和结束小时的范围。

例如:[01:00, 02:30)

稍后我想查询检查天气login_time_range是否落入WHERE子句的范围。

创建您自己的时间范围类型:

create type timerange as range (subtype = time);
create table user_logs
(
..., 
login_time_range timerange
);

则可以在该列上使用所有范围类型操作符。

但是,这将正确处理跨越午夜的范围,如您的示例20:00 - 02:00。

更好的方法可能是使用两列:一个start_time和一个duration:

create table user_logs
(
..., 
login_time time,
login_duration interval
);

然后您可以使用当前日期(或任何您想要的日期)来检测"午夜交叉:

select current_date + login_time as login_start_time, 
current_date + login_time + duration as login_end_time

相关内容

  • 没有找到相关文章

最新更新