PostgreSQL 范圍函數(shù)和運(yùn)算符

2021-08-27 10:31 更新

范圍類(lèi)型的概述可參見(jiàn) 第 8.17 節(jié) 。

表 9.53顯示了范圍類(lèi)型的專(zhuān)用操作符。除此之外,表 9.1中所示的常用比較操作符也適用于范圍類(lèi)型。 比較操作符首先按范圍下界排序,只有當(dāng)它們相等時(shí)才比較上界。 這通常不會(huì)導(dǎo)致有用的總體排序,但提供的操作符允許在范圍上構(gòu)造惟一索引。

表 9.53. 范圍操作符

操作符

描述

例子

anyrange @> anyrangeboolean

第一個(gè)范圍中包含第二個(gè)(范圍)嗎?

int4range(2,4) @> int4range(2,3)t

anyrange @> anyelementboolean

范圍是否包含元素?

'[2011-01-01,2011-03-01)'::tsrange @> '2011-01-10'::timestampt

anyrange <@ anyrangeboolean

第一個(gè)范圍包含在第二個(gè)(范圍)中嗎?

int4range(2,4) <@ int4range(1,7)t

anyelement <@ anyrangeboolean

元素是否包含在范圍內(nèi)?

42 <@ int4range(1,7)f

anyrange && anyrangeboolean

范圍是否重疊,也就是說(shuō),是否有相同的元素?

int8range(3,7) && int8range(4,12)t

anyrange << anyrangeboolean

第一個(gè)范圍是否嚴(yán)格地在第二個(gè)(范圍)的左側(cè)?

int8range(1,10) << int8range(100,110)t

anyrange >> anyrangeboolean

第一個(gè)范圍是否嚴(yán)格符合第二個(gè)(范圍)?

int8range(50,60) >> int8range(20,30)t

anyrange &< anyrangeboolean

第一個(gè)范圍是否沒(méi)有擴(kuò)展到第二個(gè)(范圍)的右側(cè)?

int8range(1,20) &< int8range(18,20)t

anyrange &> anyrangeboolean

第一個(gè)范圍是否沒(méi)有擴(kuò)展到第二個(gè)(范圍)的左側(cè)?

int8range(7,20) &> int8range(5,10)t

anyrange -|- anyrangeboolean

范圍是相鄰的么?

numrange(1.1,2.2) -|- numrange(2.2,3.3)t

anyrange + anyrangeanyrange

計(jì)算范圍的并集。范圍必須重疊或相鄰,這樣的并集就是一個(gè)單一的范圍(請(qǐng)參見(jiàn)range_merge())。

numrange(5,15) + numrange(10,20)[5,20)

anyrange * anyrangeanyrange

計(jì)算范圍的交集。

int8range(5,15) * int8range(10,20)[10,15)

anyrange - anyrangeanyrange

計(jì)算范圍的差異。第二個(gè)范圍必須不能包含在第一個(gè)(范圍)中,以使差異不是一個(gè)單一的范圍。

int8range(5,15) - int8range(10,20)[5,10)


當(dāng)涉及一個(gè)空范圍時(shí),左部/右部/相鄰操作符總是返回假;即一個(gè)空范圍被認(rèn)為不在任何其他范圍前面或者后面。

表 9.54 顯示可用于范圍類(lèi)型的函數(shù)。

表 9.54. 范圍函數(shù)

函數(shù)

描述

例子

lower ( anyrange ) → anyelement

提取范圍的下界(如果范圍為空或下界為無(wú)限,則為NULL)。

lower(numrange(1.1,2.2))1.1

upper ( anyrange ) → anyelement

提取范圍的上限(如果范圍為空或上限為無(wú)限,則為NULL)。

upper(numrange(1.1,2.2))2.2

isempty ( anyrange ) → boolean

范圍為空嗎?

isempty(numrange(1.1,2.2))f

lower_inc ( anyrange ) → boolean

范圍的下界是否包含在內(nèi)?

lower_inc(numrange(1.1,2.2))t

upper_inc ( anyrange ) → boolean

范圍的上界是否包含在內(nèi)?

upper_inc(numrange(1.1,2.2))f

lower_inf ( anyrange ) → boolean

范圍的下界是無(wú)限的嗎?

lower_inf('(,)'::daterange)t

upper_inf ( anyrange ) → boolean

范圍的上界是無(wú)限的嗎?

upper_inf('(,)'::daterange)t

range_merge ( anyrange, anyrange ) → anyrange

計(jì)算包含兩個(gè)給定范圍的最小范圍。

range_merge('[1,2)'::int4range, '[3,4)'::int4range)[1,4)


lower_inc、upper_inc、lower_inf、 和 upper_inf 函數(shù)對(duì)空范圍(empty range)都返回假(false)。


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)