postgresql中的“between”和“OVERLAPS”有什么区别?
你能举个例子吗?重叠语法中是否可以有空值
(空,x)重叠(?, ?).

最佳答案

对于a,b,c整数,a between b and c的意思就是它在普通英语中的意思:

b <= a and a <= c

对于a、b、c、d整数,[a,b] overlaps [c,d]表示它们有共同的元素:
not(b <= c) and not(d <= a)

(处理重叠时思维会受到限制。)
在处理范围类型时,空值表示无穷大。
示例:
denis=# select int4range(-1, 0), int4range(0, 1);
 int4range | int4range
-----------+-----------
 [-1,0)    | [0,1)
(1 row)

denis=# select int4range(null, 0), int4range(0, null);
 int4range | int4range
-----------+-----------
 (,0)      | [0,)
(1 row)

denis=# select int4range(null, 0) && int4range(0, null) as test;
 test
------
 f
(1 row)

denis=# select int4range(null, 1) && int4range(0, null) as test;
 test
------
 t
(1 row)

10-08 08:37