9.19. ÐиапазоннÑе ÑÑнкÑии и опеÑаÑоÑÑ
ÐиапазоннÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ ÑаÑÑмаÑÑиваÑÑÑÑ Ð² Разделе 8.17.
РТаблиÑе 9.49 Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð¾Ð¿ÐµÑаÑоÑÑ, пÑедназнаÑеннÑе Ð´Ð»Ñ ÑабоÑÑ Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð°Ð¼Ð¸.
ТаблиÑа 9.49. ÐиапазоннÑе опеÑаÑоÑÑ
| ÐпеÑаÑÐ¾Ñ | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ | РезÑлÑÑÐ°Ñ |
|---|---|---|---|
= | Ñавно | int4range(1,5) = '[1,4]'::int4range | t |
<> | не Ñавно | numrange(1.1,2.2) <> numrange(1.1,2.3) | t |
< | менÑÑе | int4range(1,10) < int4range(2,3) | t |
> | болÑÑе | int4range(1,10) > int4range(1,5) | t |
<= | менÑÑе или Ñавно | numrange(1.1,2.2) <= numrange(1.1,2.2) | t |
>= | болÑÑе или Ñавно | numrange(1.1,2.2) >= numrange(1.1,2.0) | t |
@> | ÑодеÑÐ¶Ð¸Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½ | int4range(2,4) @> int4range(2,3) | t |
@> | ÑодеÑÐ¶Ð¸Ñ ÑÐ»ÐµÐ¼ÐµÐ½Ñ | '[2011-01-01,2011-03-01)'::tsrange @> '2011-01-10'::timestamp | t |
<@ | диапазон ÑодеÑжиÑÑÑ Ð² | int4range(2,4) <@ int4range(1,7) | t |
<@ | ÑÐ»ÐµÐ¼ÐµÐ½Ñ ÑодеÑжиÑÑÑ Ð² | 42 <@ int4range(1,7) | f |
&& | пеÑеÑÐµÐºÐ°ÐµÑ (еÑÑÑ Ð¾Ð±Ñие ÑоÑки) | int8range(3,7) && int8range(4,12) | t |
<< | ÑÑÑого Ñлева Ð¾Ñ | int8range(1,10) << int8range(100,110) | t |
>> | ÑÑÑого ÑпÑава Ð¾Ñ | int8range(50,60) >> int8range(20,30) | t |
&< | не пÑоÑÑиÑаеÑÑÑ Ð¿Ñавее | int8range(1,20) &< int8range(18,20) | t |
&> | не пÑоÑÑиÑаеÑÑÑ Ð»ÐµÐ²ÐµÐµ | int8range(7,20) &> int8range(5,10) | t |
-|- | пÑимÑÐºÐ°ÐµÑ Ðº | numrange(1.1,2.2) -|- numrange(2.2,3.3) | t |
+ | union | numrange(5,15) + numrange(10,20) | [5,20) |
* | пеÑеÑеÑение | int8range(5,15) * int8range(10,20) | [10,15) |
- | вÑÑиÑание | int8range(5,15) - int8range(10,20) | [5,10) |
ÐÑоÑÑÑе опеÑаÑоÑÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ <, >, <= и >= ÑнаÑала ÑÑавниваÑÑ Ð½Ð¸Ð¶Ð½Ð¸Ðµ гÑаниÑÑ, и ÑолÑко еÑли они ÑавнÑ, ÑÑавниваÑÑ Ð²ÐµÑÑ
ние. ÐÑи опеÑаÑоÑÑ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¾Ð±ÑÑно не оÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð´Ð»Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð²; оÑновное иÑ
пÑедназнаÑение â ÑделаÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñм поÑÑÑоение индекÑов-B-деÑевÑев по диапазонам.
ÐпеÑаÑоÑÑ Ñлева/ÑпÑава/пÑимÑÐºÐ°ÐµÑ Ð²Ñегда возвÑаÑаÑÑ false, еÑли один из диапазонов пÑÑÑ; Ñо еÑÑÑ, ÑÑиÑаеÑÑÑ, ÑÑо пÑÑÑой диапазон Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð½Ðµ Ñлева и не ÑпÑава Ð¾Ñ ÐºÐ°ÐºÐ¾Ð³Ð¾-либо дÑÑгого диапазона.
ÐпеÑаÑоÑÑ ÑÐ»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ вÑÑиÑÐ°Ð½Ð¸Ñ Ð²ÑзÑваÑÑ Ð¾ÑибкÑ, еÑли полÑÑаÑÑийÑÑ Ð² ÑезÑлÑÑаÑе диапазон оказÑваеÑÑÑ ÑоÑÑоÑÑим из двÑÑ ÑазделÑннÑÑ Ð¿Ð¾Ð´Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð², Ñак как его нелÑÐ·Ñ Ð¿ÑедÑÑавиÑÑ Ð² ÑÑом Ñипе даннÑÑ .
РТаблиÑе 9.50 пеÑеÑиÑÐ»ÐµÐ½Ñ ÑÑнкÑии, пÑедназнаÑеннÑе Ð´Ð»Ñ ÑабоÑÑ Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð½Ñми Ñипами.
ТаблиÑа 9.50. ÐиапазоннÑе ÑÑнкÑии
| ФÑнкÑÐ¸Ñ | Тип ÑезÑлÑÑаÑа | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ | РезÑлÑÑÐ°Ñ |
|---|---|---|---|---|
| Ñип ÑлеменÑа диапазона | нижнÑÑ Ð³ÑаниÑа диапазона | lower(numrange(1.1, 2.2)) | 1.1 |
| Ñип ÑлеменÑа диапазона | веÑÑ Ð½ÑÑ Ð³ÑаниÑа диапазона | upper(numrange(1.1, 2.2)) | 2.2 |
| boolean | диапазон пÑÑÑ? | isempty(numrange(1.1,2.2)) | false |
| boolean | нижнÑÑ Ð³ÑаниÑа вклÑÑаеÑÑÑ? | lower_inc(numrange(1.1, 2.2)) | true |
| boolean | веÑÑ Ð½ÑÑ Ð³ÑаниÑа вклÑÑаеÑÑÑ? | upper_inc(numrange(1.1, 2.2)) | false |
| boolean | нижнÑÑ Ð³ÑаниÑа Ñавна беÑконеÑноÑÑи? | lower_inf('(,)'::daterange) | true |
| boolean | веÑÑ Ð½ÑÑ Ð³ÑаниÑа Ñавна беÑконеÑноÑÑи? | upper_inf('(,)'::daterange) | true |
| anyrange | наименÑÑий диапазон, вклÑÑаÑÑий оба заданнÑÑ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð° | range_merge('[1,2)'::int4range, '[3,4)'::int4range) | [1,4) |
ФÑнкÑии lower и upper возвÑаÑаÑÑ NULL, еÑли диапазон пÑÑÑ Ð¸Ð»Ð¸ ÑÐºÐ°Ð·Ð°Ð½Ð½Ð°Ñ Ð³ÑаниÑа Ñавна беÑконеÑноÑÑи. ÐÑли же пÑÑÑой диапазон пеÑедаÑÑÑÑ ÑÑнкÑиÑм lower_inc, upper_inc, lower_inf и upper_inf, вÑе они возвÑаÑаÑÑ false.