이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 9.20. 윈 토토/멀티 랜지 함수 및 연산자버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

9.20. 범위/다중 토토 캔 함수 및 연산자#

참조PostgreSQL : 문서 : 개발 : 8.17. 토토 베이 유형토토 캔 유형에 대한 개요입니다.

표 9.58토토 캔 유형에 사용할 수 있는 특수 연산자를 표시합니다.표 9.59다중 토토 캔 유형에 사용할 수 있는 특수 연산자를 표시합니다. 그 외에도 다음과 같은 일반적인 비교 연산자가 있습니다.표 9.1토토 캔 및 다중 토토 캔 유형에 사용할 수 있습니다. 비교 연산자는 먼저 토토 캔 하한을 기준으로 정렬하고, 해당 값이 동일한 경우에만 상한을 비교합니다. 다중 토토 캔 연산자는 하나가 동일하지 않을 때까지 각 토토 캔를 비교합니다. 이는 일반적으로 유용한 전체 순서로 이어지지는 않지만 토토 캔에 고유 인덱스를 구성할 수 있도록 연산자가 제공됩니다.

표 9.58. 범위 연산자

운영자

설명

anyrange @ anyrange부울

첫 번째 토토 캔에 두 번째 토토 캔가 포함되어 있습니까?

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

아무토토 캔 @ 모든 요소부울

토토 캔에 요소가 포함되어 있습니까?

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

anyrange <@ anyrange부울

첫 번째 토토 캔가 두 번째 토토 캔에 포함되어 있습니까?

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

모든 요소 <@ 아무토토 캔부울

요소가 토토 캔에 포함되어 있습니까?

42 <@ int4range(1,7)f

anyrange && anyrange부울

토토 캔가 겹치나요, 즉 공통 요소가 있습니까?

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

아무토토 캔 << anyrange부울

첫 번째 토토 캔는 두 번째 토토 캔의 왼쪽에 있습니까?

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

anyrange anyrange부울

첫 번째 토토 캔가 두 번째 토토 캔의 오른쪽에 있습니까?

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

아무토토 캔 &< anyrange부울

첫 번째 토토 캔가 두 번째 토토 캔의 오른쪽으로 확장되지 않습니까?

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

아무토토 캔 & anyrange부울

첫 번째 토토 캔가 두 번째 토토 캔의 왼쪽으로 확장되지 않습니까?

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

아무토토 캔 -|- anyrange부울

토토 캔가 인접해 있습니까?

숫자 범위(1.1,2.2) -|- 숫자 범위(2.2,3.3)t

anyrange + anyrangeanyrange

범위의 합집합을 계산합니다. 범위는 서로 겹치거나 인접해야 하므로 합집합은 단일 범위가 됩니다(그러나 참조range_merge()).

숫자 토토 캔(5,15) + 숫자 토토 캔(10,20)[5,20)

아무토토 캔 * anyrangeanyrange

토토 캔의 교차점을 계산합니다.

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

anyrange - anyrangeanyrange

토토 캔의 차이를 계산합니다. 두 번째 토토 캔는 차이가 단일 토토 캔가 되지 않도록 첫 번째 토토 캔에 포함되어서는 안 됩니다.

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


표 9.59. 다중 토토 캔 연산자

운영자

설명

anymultirange @ anymultirange부울

첫 번째 다중 토토 캔에 두 번째 다중 토토 캔가 포함되어 있습니까?

'[2,4)'::int4multirange @ '[2,3)'::int4multiranget

anymultirange @ anyrange부울

다중 토토 캔에 토토 캔가 포함되어 있습니까?

'[2,4)'::int4multirange @ int4range(2,3)t

anymultirange @ 모든 요소부울

다중 토토 캔에 요소가 포함되어 있습니까?

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

anyrange @ 다중 토토 캔부울

범위에 다중 토토 캔가 포함되어 있습니까?

'[2,4)'::int4range @ '[2,3)'::int4multiranget

anymultirange <@ anymultirange부울

첫 번째 다중 토토 캔가 두 번째 다중 토토 캔에 포함되어 있습니까?

'[2,4)'::int4multirange <@ '[1,7)'::int4multiranget

anymultirange <@ anyrange부울

범위에 다중 토토 캔가 포함되어 있습니까?

'[2,4)'::int4multirange <@ int4range(1,7)t

anyrange <@ anymultirange부울

범위가 다중 토토 캔에 포함되어 있습니까?

int4range(2,4) <@ '[1,7)'::int4multiranget

모든 요소 <@ anymultirange부울

요소가 다중 토토 캔에 포함되어 있습니까?

4 <@ '[1,7)'::int4multiranget

anymultirange && anymultirange부울

다중 토토 캔가 겹치나요, 즉 공통 요소가 있습니까?

'[3,7)'::int8multirange && '[4,12)'::int8multiranget

anymultirange && anyrange부울

다중 토토 캔가 범위와 겹치나요?

'[3,7)'::int8multirange && int8range(4,12)t

anyrange && anymultirange부울

범위가 다중 토토 캔와 겹치나요?

int8range(3,7) && '[4,12)'::int8multiranget

anymultirange << anymultirange부울

첫 번째 다중 토토 캔는 두 번째 다중 토토 캔의 왼쪽에 있습니까?

'[1,10)'::int8multirange << '[100,110)'::int8multiranget

anymultirange << 아무토토 캔부울

다중 토토 캔가 범위의 왼쪽에 있습니까?

'[1,10)'::int8multirange << int8range(100,110)t

anyrange << anymultirange부울

범위가 다중 토토 캔의 왼쪽에 있습니까?

int8range(1,10) << '[100,110)'::int8multiranget

anymultirange anymultirange부울

첫 번째 다중 토토 캔가 두 번째 다중 토토 캔에 정확히 맞습니까?

'[50,60)'::int8multirange '[20,30)'::int8multiranget

anymultirange anyrange부울

다중 토토 캔가 범위의 오른쪽에 있습니까?

'[50,60)'::int8multirange int8range(20,30)t

아무토토 캔 anymultirange부울

범위가 다중 토토 캔에 정확히 맞습니까?

int8range(50,60) '[20,30)'::int8multiranget

anymultirange &< anymultirange부울

첫 번째 다중 토토 캔가 두 번째 다중 토토 캔의 오른쪽으로 확장되지 않습니까?

'[1,20)'::int8multirange &< '[18,20)'::int8multiranget

anymultirange &< 아무토토 캔부울

다중 토토 캔가 범위 오른쪽으로 확장되지 않습니까?

'[1,20)'::int8multirange &< int8range(18,20)t

anyrange &< anymultirange부울

범위가 다중 토토 캔의 오른쪽으로 확장되지 않습니까?

int8range(1,20) &< '[18,20)'::int8multiranget

anymultirange & 모든다중토토 캔부울

첫 번째 다중 토토 캔가 두 번째 다중 토토 캔의 왼쪽으로 확장되지 않습니까?

'[7,20)'::int8multirange & '[5,10)'::int8multiranget

anymultirange & anyrange부울

다중 토토 캔가 범위의 왼쪽으로 확장되지 않습니까?

'[7,20)'::int8multirange & int8range(5,10)t

아무토토 캔 & anymultirange부울

범위가 다중 토토 캔의 왼쪽으로 확장되지 않습니까?

int8range(7,20) & '[5,10)'::int8multiranget

anymultirange -|- anymultirange부울

다중 토토 캔가 인접해 있습니까?

'[1.1,2.2)'::nummultirange -|- '[2.2,3.3)'::nummultiranget

anymultirange -|- 아무토토 캔부울

다중 토토 캔가 범위에 인접해 있습니까?

'[1.1,2.2)'::nummultirange -|- 숫자 범위(2.2,3.3)t

anyrange -|- anymultirange부울

범위가 다중 토토 캔에 인접해 있습니까?

숫자 범위(1.1,2.2) -|- '[2.2,3.3)'::nummultiranget

anymultirange + anymultirangeanymultirange

다중 토토 캔의 합집합을 계산합니다. 다중 토토 캔는 겹치거나 인접할 필요가 없습니다.

'[5,10)'::nummultirange + '[15,20)'::nummultirange{[5,10), [15,20)}

anymultirange * anymultirangeanymultirange

다중 토토 캔의 교차점을 계산합니다.

'[5,15)'::int8multirange * '[10,20)'::int8multirange{[10,15)}

anymultirange - anymultirangeanymultirange

다중 토토 캔의 차이를 계산합니다.

'[5,20)'::int8multirange - '[10,15)'::int8multirange{[5,10), [15,20)}


왼쪽/오른쪽/인접 연산자는 빈 범위 또는 다중 토토 캔가 포함될 때 항상 false를 반환합니다. 즉, 빈 범위는 다른 범위 앞이나 뒤에 있는 것으로 간주되지 않습니다.

다른 곳에서는 빈 범위와 다중 토토 캔가 추가 ID로 처리됩니다. 빈 값과 결합된 모든 것은 그 자체입니다. 빈 값을 뺀 것은 그 자체입니다. 빈 다중 토토 캔에는 빈 범위와 정확히 동일한 점이 있습니다. 모든 범위에는 빈 범위가 포함됩니다. 모든 다중 토토 캔에는 원하는 만큼의 빈 범위가 포함됩니다.

결과 범위에 두 개의 분리된 하위 범위가 포함되어야 하는 경우 범위 합집합 및 차이 연산자는 실패합니다. 이러한 범위는 표현할 수 없습니다. 다중 토토 캔 매개변수를 취하고 다중 토토 캔를 반환하는 합집합과 차이에 대한 별도의 연산자가 있으며 인수가 서로소인 경우에도 실패하지 않습니다. 따라서 분리될 수 있는 범위에 대한 합집합 또는 차이 연산이 필요한 경우 먼저 범위를 다중 범위로 변환하여 오류를 방지할 수 있습니다.

표 9.60토토 캔 유형과 함께 사용할 수 있는 함수를 표시합니다.표 9.61다중 토토 캔 유형과 함께 사용할 수 있는 기능을 보여줍니다.

표 9.60. 범위 함수

기능

설명

하위 ( anyrange ) → 모든 요소

토토 캔의 하한을 추출합니다(NULL범위가 비어 있거나 하한이 없는 경우).

낮음(숫자 토토 캔(1.1,2.2))1.1

상위 ( 아무토토 캔 ) → 모든 요소

토토 캔의 상한을 추출합니다(NULL범위가 비어 있거나 상한이 없는 경우).

상위(숫자 범위(1.1,2.2))2.2

비어 있음 ( 아무토토 캔 ) → 부울

토토 캔가 비어 있습니까?

isempty(숫자 범위(1.1,2.2))f

lower_inc ( anyrange ) → 부울

토토 캔의 하한도 포함됩니까?

lower_inc(숫자 범위(1.1,2.2))t

upper_inc ( 아무토토 캔 ) → 부울

토토 캔의 상한이 포함됩니까?

upper_inc(숫자 범위(1.1,2.2))f

lower_inf ( 아무토토 캔 ) → 부울

토토 캔에 하한이 없습니까? (하한값-무한대거짓을 반환합니다.)

lower_inf('(,)'::날짜 범위)t

upper_inf ( 아무토토 캔 ) → 부울

토토 캔에 상한이 없습니까? (상한은무한대거짓을 반환합니다.)

upper_inf('(,)'::날짜 범위)t

토토 캔_병합 ( 아무토토 캔, anyrange ) → anyrange

주어진 토토 캔를 모두 포함하는 가장 작은 토토 캔를 계산합니다.

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


표 9.61. 다중 토토 캔 기능

기능

설명

하위 ( anymultirange ) → 모든 요소

다중 토토 캔의 하한을 추출합니다(NULL다중 토토 캔가 비어 있거나 하한이 없는 경우).

lower('[1.1,2.2)'::nummultirange)1.1

상부 ( anymultirange ) → 모든 요소

다중 토토 캔의 상한을 추출합니다(NULL다중 토토 캔가 비어 있거나 상한이 없는 경우).

상위('[1.1,2.2)'::nummultirange)2.2

비어있음 ( anymultirange ) → 부울

다중 토토 캔가 비어 있습니까?

isempty('[1.1,2.2)'::nummultirange)f

lower_inc ( anymultirange ) → 부울

다중 토토 캔의 하한이 포함됩니까?

lower_inc('[1.1,2.2)'::nummultirange)t

upper_inc ( anymultirange ) → 부울

다중 토토 캔의 상한이 포함됩니까?

upper_inc('[1.1,2.2)'::nummultirange)f

lower_inf ( anymultirange ) → 부울

다중 토토 캔에는 하한이 없습니까? (하한값-무한대거짓을 반환합니다.)

lower_inf('(,)'::datemultirange)t

upper_inf ( anymultirange ) → 부울

다중 토토 캔에는 상한이 없습니까? (상한은무한대거짓을 반환합니다.)

upper_inf('(,)'::datemultirange)t

토토 캔_병합 ( anymultirange ) → 아무토토 캔

전체 다중 토토 캔를 포함하는 가장 작은 범위를 계산합니다.

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

다중 토토 캔 ( 아무토토 캔 ) → anymultirange

주어진 범위만 포함하는 다중 토토 캔를 반환합니다.

다중 토토 캔('[1,2)'::int4range){[1,2)}

unnest ( anymultirange ) → setofanyrange

다중 토토 캔를 오름차순으로 일련의 범위로 확장합니다.

unnest('[1,2), [3,4)'::int4multirange)

 [1,2)
 [3,4)

lower_inc, upper_inc, lower_infupper_inf함수는 모두 빈 범위 또는 다중 토토 캔에 대해 false를 반환합니다.