PostgreSQL使用OVERLAPS函数判断两个时间段的交集

先上sql:

select (to_date('2023-01-30','yyyy-MM-dd'), to_date('2023-02-01','yyyy-MM-dd')) overlaps (to_date('2023-01-01','yyyy-MM-dd'), to_date('2023-01-31','yyyy-MM-dd'));

返回值是布尔类型,如果两个时间有交集的话会返回true,如果两个时间没有交集的话返回false;

经测试overlaps两边的必须至少有一边是date类型,如果两边都是字符串类型则会报错;

两侧字符串类型:

--报错
select ('2023-01-01', '2023-01-31') overlaps ('2023-01-01', '2023-01-31');

左侧为date类型,右侧为字符串类型:

--正常,返回true,有交集
select (to_date('2023-01-01','yyyy-MM-dd'), to_date('2023-01-31','yyyy-MM-dd')) overlaps ('2023-01-30', '2023-02-01');

左侧为字符串类型,右侧为date类型:

--正常,返回false,无交集
select ('2023-01-01', '2023-01-31') overlaps (to_date('2023-02-01','yyyy-MM-dd'), to_date('2023-02-02','yyyy-MM-dd'));

左右两侧都为date类型:

--正常,返回true,有交集
select (to_date('2023-01-01','yyyy-MM-dd'), to_date('2023-01-31','yyyy-MM-dd')) overlaps (to_date('2023-01-01','yyyy-MM-dd'), to_date('2023-01-31','yyyy-MM-dd'));

实践举例:

现有一张订单表,表名为orders,表内数据如下图:

 如果在开始时间和结束时间之间则表示该订单为有效订单,我要查询一个时间段内有效的订单就可以使用以下sql:

select *
from orders
where (start_time, end_time) overlaps ('2023-04-01', '2023-07-01');

返回结果如下:

可以看到我要查询四月到七月之间的有效订单,订单1和订单2均与该段时间有交集,而订单3因为与四月和七月没有交集所以为四月到七月之间的无效订单;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值