我想使用 SQL 从多范围中提取与另一个范围重叠的范围。
例如,
{[5,10), [14,20), [26,28), [29,31)}
与 {[15,27)}
应得到 {[14,20), [26,28)}
。
我可以用
unnest
和 range_agg
来实现这一点:
select range_agg(t.v) from (select unnest(:ranges) v) t where t.v && :range;
但是它的性能似乎很差。您有什么想法以更有效的方式做到这一点吗?
PS。我希望有这样的
&
运算符:
{[5,10), [14,20), [26,28), [29,31)} & {[15,27)} -> {[14,20), [26,28)}