]> granicus.if.org Git - postgresql/commitdiff
doc: show how interval's 3 unit buckets behave using EXTRACT()
authorBruce Momjian <bruce@momjian.us>
Sun, 24 Jun 2018 03:32:42 +0000 (23:32 -0400)
committerBruce Momjian <bruce@momjian.us>
Sun, 24 Jun 2018 03:32:42 +0000 (23:32 -0400)
This clarifies when justify_days() and justify_hours() are useful.
Paragraph moved too.

Reported-by: vodevsh@gmail.com
Discussion: https://postgr.es/m/152698651482.26744.15456677499485530703@wrigleys.postgresql.org

Backpatch-through: 9.3

doc/src/sgml/datatype.sgml

index 67bae322878486345b9ae704e093e6c086b581ba..cc54cc8a583d06d3824afad861d0418eb508255b 100644 (file)
@@ -2670,19 +2670,6 @@ P <optional> <replaceable>years</replaceable>-<replaceable>months</replaceable>-
      to each field if any field is negative.
     </para>
 
-    <para>
-     Internally <type>interval</type> values are stored as months, days,
-     and seconds. This is done because the number of days in a month
-     varies, and a day can have 23 or 25 hours if a daylight savings
-     time adjustment is involved.  The months and days fields are integers
-     while the seconds field can store fractions.  Because intervals are
-     usually created from constant strings or <type>timestamp</type> subtraction,
-     this storage method works well in most cases. Functions
-     <function>justify_days</function> and <function>justify_hours</function> are
-     available for adjusting days and hours that overflow their normal
-     ranges.
-    </para>
-
     <para>
      In the verbose input format, and in some fields of the more compact
      input formats, field values can have fractional parts; for example
@@ -2734,6 +2721,33 @@ P <optional> <replaceable>years</replaceable>-<replaceable>months</replaceable>-
       </tgroup>
      </table>
 
+    <para>
+     Internally <type>interval</type> values are stored as months, days,
+     and seconds. This is done because the number of days in a month
+     varies, and a day can have 23 or 25 hours if a daylight savings
+     time adjustment is involved.  The months and days fields are integers
+     while the seconds field can store fractions.  Because intervals are
+     usually created from constant strings or <type>timestamp</type> subtraction,
+     this storage method works well in most cases, but can cause unexpected
+     results:
+
+<programlisting>
+SELECT EXTRACT(hours from '80 minutes'::interval);
+ date_part
+-----------
+         1
+
+SELECT EXTRACT(days from '80 hours'::interval);
+ date_part
+-----------
+         0
+</programlisting>
+
+     Functions <function>justify_days</function> and
+     <function>justify_hours</function> are available for adjusting days
+     and hours that overflow their normal ranges.
+    </para>
+
    </sect2>
 
    <sect2 id="datatype-interval-output">