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

참조PostgreSQL : 문서 : 18 : 8.17. 젠 토토 유형범위 유형에 대한 개요입니다.

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

표 9.58. 범위 연산자

운영자

설명

아무범위 @ anyra젠 토토e부울

첫 번째 범위에 두 번째 범위가 포함되어 있습니까?

int4ra젠 토토e(2,4) @ int4ra젠 토토e(2,3)t

anyra젠 토토e @ 모든 요소부울

범위에 요소가 포함되어 있습니까?

'[2011-01-01,2011-03-01)'::tsra젠 토토e @ '2011-01-10'::timestampt

anyra젠 토토e <@ anyra젠 토토e부울

첫 번째 범위가 두 번째 범위에 포함되어 있습니까?

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

모든 요소 <@ anyra젠 토토e부울

요소가 범위에 포함되어 있습니까?

42 <@ int4range(1,7)f

아무범위 && anyra젠 토토e부울

범위가 겹치나요, 즉 공통 요소가 있습니까?

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

아무범위 << anyra젠 토토e부울

첫 번째 범위는 두 번째 범위의 왼쪽에 있습니까?

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

anyra젠 토토e anyra젠 토토e부울

첫 번째 범위가 두 번째 범위의 오른쪽에 있습니까?

int8ra젠 토토e(50,60) int8ra젠 토토e(20,30)t

anyra젠 토토e &< anyra젠 토토e부울

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

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

anyra젠 토토e & 아무범위부울

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

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

아무범위 -|- anyra젠 토토e부울

범위가 인접해 있습니까?

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

anyra젠 토토e + 아무범위anyra젠 토토e

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

숫자 범위(5,15) + 숫자 범위(10,20)[5,20)

anyra젠 토토e * anyra젠 토토eanyra젠 토토e

범위의 교차점을 계산합니다.

int8ra젠 토토e(5,15) * int8ra젠 토토e(10,20)[10,15)

anyra젠 토토e - anyra젠 토토e아무범위

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

int8ra젠 토토e(5,15) - int8ra젠 토토e(10,20)[5,10)


표 9.59. 다중 범위 연산자

운영자

설명

anymultira젠 토토e @ anymultira젠 토토e부울

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

'[2,4)'::int4multira젠 토토e @ '[2,3)'::int4multira젠 토토et

anymultira젠 토토e @ 아무범위부울

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

'[2,4)'::int4multira젠 토토e @ int4ra젠 토토e(2,3)t

anymultira젠 토토e @ 모든 요소부울

다중 범위에 요소가 포함되어 있습니까?

'[2011-01-01,2011-03-01)'::tsmultira젠 토토e @ '2011-01-10'::timestampt

anyra젠 토토e @ anymultira젠 토토e부울

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

'[2,4)'::int4ra젠 토토e @ '[2,3)'::int4multira젠 토토et

anymultira젠 토토e <@ 모든다중범위부울

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

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

anymultira젠 토토e <@ anyra젠 토토e부울

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

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

anyra젠 토토e <@ anymultira젠 토토e부울

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

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

모든 요소 <@ anymultira젠 토토e부울

요소가 다중 범위에 포함되어 있습니까?

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

anymultira젠 토토e && anymultira젠 토토e부울

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

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

anymultira젠 토토e && anyra젠 토토e부울

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

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

anyra젠 토토e && anymultira젠 토토e부울

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

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

anymultira젠 토토e << anymultira젠 토토e부울

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

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

anymultira젠 토토e << anyra젠 토토e부울

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

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

아무범위 << anymultira젠 토토e부울

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

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

anymultira젠 토토e anymultira젠 토토e부울

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

'[50,60)'::int8multira젠 토토e '[20,30)'::int8multira젠 토토et

anymultira젠 토토e 아무범위부울

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

'[50,60)'::int8multira젠 토토e int8ra젠 토토e(20,30)t

아무범위 anymultira젠 토토e부울

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

int8ra젠 토토e(50,60) '[20,30)'::int8multira젠 토토et

anymultira젠 토토e &< anymultira젠 토토e부울

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

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

anymultira젠 토토e &< 아무범위부울

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

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

아무범위 &< anymultira젠 토토e부울

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

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

anymultira젠 토토e & 다중 범위부울

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

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

anymultira젠 토토e & 아무범위부울

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

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

anyra젠 토토e & anymultira젠 토토e부울

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

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

anymultira젠 토토e -|- anymultira젠 토토e부울

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

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

다중 범위 -|- anyra젠 토토e부울

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

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

아무범위 -|- anymultira젠 토토e부울

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

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

anymultira젠 토토e + anymultira젠 토토eanymultira젠 토토e

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

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

anymultira젠 토토e * anymultira젠 토토eanymultira젠 토토e

다중 범위의 교차점을 계산합니다.

'[5,15)'::int8multira젠 토토e * '[10,20)'::int8multira젠 토토e{[10,15)}

anymultira젠 토토e - anymultira젠 토토eanymultira젠 토토e

다중 범위의 차이를 계산합니다.

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


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

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

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

표 9.60범위 유형과 함께 사용할 수 있는 함수를 표시합니다.표 9.61다중 범위 유형과 함께 사용할 수 있는 기능을 표시합니다.

표 9.60. 범위 함수

기능

설명

하위 ( 아무범위 ) → 모든 요소

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

낮음(숫자 범위(1.1,2.2))1.1

상위 ( 아무범위 ) → 모든 요소

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

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

비어 있음 ( anyra젠 토토e ) → 부울

범위가 비어 있습니까?

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

lower_inc ( 아무범위 ) → 부울

범위의 하한이 포함됩니까?

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

upper_inc ( 아무범위 ) → 부울

범위의 상한이 포함됩니까?

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

lower_inf ( 아무범위 ) → 부울

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

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

upper_inf ( anyra젠 토토e ) → 부울

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

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

범위_병합 ( 아무범위, 아무범위 ) → 아무범위

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

ra젠 토토e_merge('[1,2)'::int4ra젠 토토e, '[3,4)'::int4ra젠 토토e)[1,4)


표 9.61. 다중 범위 기능

기능

설명

하위 ( anymultira젠 토토e ) → 모든 요소

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

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

상위 ( anymultira젠 토토e ) → 모든 요소

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

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

비어 있음 ( anymultira젠 토토e ) → 부울

다중 범위가 비어 있습니까?

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

lower_inc ( anymultira젠 토토e ) → 부울

다중 범위의 하한이 포함됩니까?

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

upper_inc ( anymultira젠 토토e ) → 부울

다중 범위의 상한이 포함됩니까?

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

lower_inf ( anymultira젠 토토e ) → 부울

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

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

upper_inf ( anymultira젠 토토e ) → 부울

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

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

범위_병합 ( anymultira젠 토토e ) → 아무범위

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

ra젠 토토e_merge('[1,2), [3,4)'::int4multira젠 토토e)[1,4)

다중 범위 ( 아무범위 ) → anymultira젠 토토e

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

다중 범위('[1,2)'::int4range){[1,2)}

unnest ( anymultira젠 토토e ) → setofanyra젠 토토e

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

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

 [1,2)
 [3,4)

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

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.