Postgresql使用时间范围,而不是日期时间范围
请告知我如何在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子句的范围。只需创建自己的时间范围类
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