@@ -10460,6 +10460,10 @@ SELECT NULLIF(value, '(none)') ...
10460
10460
<sect1 id="functions-range">
10461
10461
<title>Range Functions and Operators</title>
10462
10462
10463
+ <para>
10464
+ See <xref linkend="rangetypes"> for an overview of range types.
10465
+ </para>
10466
+
10463
10467
<para>
10464
10468
<xref linkend="range-operators-table"> shows the operators
10465
10469
available for range types.
@@ -10556,65 +10560,74 @@ SELECT NULLIF(value, '(none)') ...
10556
10560
10557
10561
<row>
10558
10562
<entry> <literal>&<</literal> </entry>
10559
- <entry>Does not extend to the right of? </entry>
10563
+ <entry>does not extend to the right of</entry>
10560
10564
<entry><literal>int8range(1,20) &< int8range(18,20)</literal></entry>
10561
10565
<entry><literal>t</literal></entry>
10562
10566
</row>
10563
10567
10564
10568
<row>
10565
10569
<entry> <literal>&></literal> </entry>
10566
- <entry>Does not extend to the left of? </entry>
10570
+ <entry>does not extend to the left of</entry>
10567
10571
<entry><literal>int8range(7,20) &> int8range(5,10)</literal></entry>
10568
10572
<entry><literal>t</literal></entry>
10569
10573
</row>
10570
10574
10571
10575
<row>
10572
10576
<entry> <literal>-|-</literal> </entry>
10573
- <entry>adjacent? </entry>
10577
+ <entry>is adjacent to </entry>
10574
10578
<entry><literal>numrange(1.1,2.2) -|- numrange(2.2,3.3)</literal></entry>
10575
10579
<entry><literal>t</literal></entry>
10576
10580
</row>
10577
10581
10578
10582
<row>
10579
10583
<entry> <literal>+</literal> </entry>
10580
- <entry>Union </entry>
10584
+ <entry>union </entry>
10581
10585
<entry><literal>numrange(5,15) + numrange(10,20)</literal></entry>
10582
10586
<entry><literal>[5,20)</literal></entry>
10583
10587
</row>
10584
10588
10585
- <row>
10586
- <entry> <literal>-</literal> </entry>
10587
- <entry>Difference</entry>
10588
- <entry><literal>int8range(5,15) - int8range(10,20)</literal></entry>
10589
- <entry><literal>[5,10)</literal></entry>
10590
- </row>
10591
-
10592
10589
<row>
10593
10590
<entry> <literal>*</literal> </entry>
10594
- <entry>Intersection </entry>
10591
+ <entry>intersection </entry>
10595
10592
<entry><literal>int8range(5,15) * int8range(10,20)</literal></entry>
10596
10593
<entry><literal>[10,15)</literal></entry>
10597
10594
</row>
10598
10595
10596
+ <row>
10597
+ <entry> <literal>-</literal> </entry>
10598
+ <entry>difference</entry>
10599
+ <entry><literal>int8range(5,15) - int8range(10,20)</literal></entry>
10600
+ <entry><literal>[5,10)</literal></entry>
10601
+ </row>
10602
+
10599
10603
</tbody>
10600
10604
</tgroup>
10601
10605
</table>
10602
10606
10603
10607
<para>
10604
- Range comparisons compare the lower bounds first, and only if
10605
- equal, compare the upper bounds. This is generally most useful for
10606
- B-tree indexes, rather than being useful comparisons by themselves.
10608
+ The simple comparison operators <literal><</literal>,
10609
+ <literal>></literal>, <literal><=</literal>, and
10610
+ <literal>>=</literal> compare the lower bounds first, and only if those
10611
+ are equal, compare the upper bounds. These comparisons are not usually
10612
+ very useful for ranges, but are provided to allow B-tree indexes to be
10613
+ constructed on ranges.
10607
10614
</para>
10608
10615
10609
10616
<para>
10610
- See <xref linkend="rangetypes"> for more details about range operator
10611
- behavior.
10617
+ The left-of/right-of/adjacent operators always return false when an empty
10618
+ range is involved; that is, an empty range is not considered to be either
10619
+ before or after any other range.
10620
+ </para>
10621
+
10622
+ <para>
10623
+ The union and difference operators will fail if the resulting range would
10624
+ need to contain two disjoint sub-ranges, as such a range cannot be
10625
+ represented.
10612
10626
</para>
10613
10627
10614
10628
<para>
10615
10629
<xref linkend="range-functions-table"> shows the functions
10616
- available for use with range types. See <xref linkend="rangetypes">
10617
- for more information and examples of the use of these functions.
10630
+ available for use with range types.
10618
10631
</para>
10619
10632
10620
10633
<indexterm>
@@ -10658,7 +10671,7 @@ SELECT NULLIF(value, '(none)') ...
10658
10671
<function>lower</function>(<type>anyrange</type>)
10659
10672
</literal>
10660
10673
</entry>
10661
- <entry>< type>anyrange</type> </entry>
10674
+ <entry>range's element type</entry>
10662
10675
<entry>lower bound of range</entry>
10663
10676
<entry><literal>lower(numrange(1.1,2.2))</literal></entry>
10664
10677
<entry><literal>1.1</literal></entry>
@@ -10669,7 +10682,7 @@ SELECT NULLIF(value, '(none)') ...
10669
10682
<function>upper</function>(<type>anyrange</type>)
10670
10683
</literal>
10671
10684
</entry>
10672
- <entry>< type>anyrange</type> </entry>
10685
+ <entry>range's element type</entry>
10673
10686
<entry>upper bound of range</entry>
10674
10687
<entry><literal>upper(numrange(1.1,2.2))</literal></entry>
10675
10688
<entry><literal>2.2</literal></entry>
@@ -10680,7 +10693,7 @@ SELECT NULLIF(value, '(none)') ...
10680
10693
<function>isempty</function>(<type>anyrange</type>)
10681
10694
</literal>
10682
10695
</entry>
10683
- <entry><type>anyrange </type></entry>
10696
+ <entry><type>boolean </type></entry>
10684
10697
<entry>is the range empty?</entry>
10685
10698
<entry><literal>isempty(numrange(1.1,2.2))</literal></entry>
10686
10699
<entry><literal>false</literal></entry>
@@ -10691,8 +10704,8 @@ SELECT NULLIF(value, '(none)') ...
10691
10704
<function>lower_inc</function>(<type>anyrange</type>)
10692
10705
</literal>
10693
10706
</entry>
10694
- <entry><type>anyrange </type></entry>
10695
- <entry>is the lower bound of the range inclusive?</entry>
10707
+ <entry><type>boolean </type></entry>
10708
+ <entry>is the lower bound inclusive?</entry>
10696
10709
<entry><literal>lower_inc(numrange(1.1,2.2))</literal></entry>
10697
10710
<entry><literal>true</literal></entry>
10698
10711
</row>
@@ -10702,8 +10715,8 @@ SELECT NULLIF(value, '(none)') ...
10702
10715
<function>upper_inc</function>(<type>anyrange</type>)
10703
10716
</literal>
10704
10717
</entry>
10705
- <entry><type>anyrange </type></entry>
10706
- <entry>is the upper bound of the range inclusive?</entry>
10718
+ <entry><type>boolean </type></entry>
10719
+ <entry>is the upper bound inclusive?</entry>
10707
10720
<entry><literal>upper_inc(numrange(1.1,2.2))</literal></entry>
10708
10721
<entry><literal>false</literal></entry>
10709
10722
</row>
@@ -10713,8 +10726,8 @@ SELECT NULLIF(value, '(none)') ...
10713
10726
<function>lower_inf</function>(<type>anyrange</type>)
10714
10727
</literal>
10715
10728
</entry>
10716
- <entry><type>anyrange </type></entry>
10717
- <entry>is the lower bound of the range infinite?</entry>
10729
+ <entry><type>boolean </type></entry>
10730
+ <entry>is the lower bound infinite?</entry>
10718
10731
<entry><literal>lower_inf('(,)'::daterange)</literal></entry>
10719
10732
<entry><literal>true</literal></entry>
10720
10733
</row>
@@ -10724,8 +10737,8 @@ SELECT NULLIF(value, '(none)') ...
10724
10737
<function>upper_inf</function>(<type>anyrange</type>)
10725
10738
</literal>
10726
10739
</entry>
10727
- <entry><type>anyrange </type></entry>
10728
- <entry>is the upper bound of the range infinite?</entry>
10740
+ <entry><type>boolean </type></entry>
10741
+ <entry>is the upper bound infinite?</entry>
10729
10742
<entry><literal>upper_inf('(,)'::daterange)</literal></entry>
10730
10743
<entry><literal>true</literal></entry>
10731
10744
</row>
0 commit comments