Postgresql使用时间范围,而不是日期时间范围

Postgresql使用时间范围,而不是日期时间范围,postgresql,Postgresql,请告知我如何在Postgresql中简化时间范围。我想执行如下查询: SELECT user_id FROM user_logs WHERE login_time_range BETWEEN '20:00' AND '02:00' 注意,我不是在寻找datetime类型。我也知道tsrange也不适合我的需要 在上面的查询中,我想将登录时间范围存储为开始和结束时间范围 例如:[01:00,02:30) 稍后我想查询以检查天气登录时间范围是否属于WHERE子句的范围。只需创建自己的时间范围类

请告知我如何在Postgresql中简化时间范围。我想执行如下查询:

SELECT user_id 
FROM user_logs 
WHERE login_time_range BETWEEN '20:00' AND '02:00'
注意,我不是在寻找
datetime
类型。我也知道
tsrange
也不适合我的需要

在上面的查询中,我想将登录时间范围存储为开始和结束时间范围

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


稍后我想查询以检查天气登录时间范围是否属于
WHERE
子句的范围。

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

create type timerange as range (subtype = time);

create table user_logs
(
  ..., 
  login_time_range timerange
);
然后,您可以在该列中使用all

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

更好的方法可能是使用两列:开始时间和持续时间:

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

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

create type timerange as range (subtype = time);

create table user_logs
(
  ..., 
  login_time_range timerange
);
然后,您可以在该列中使用all

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

更好的方法可能是使用两列:开始时间和持续时间:

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