doc: show how interval's 3 unit buckets behave using EXTRACT()

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
This commit is contained in:
Bruce Momjian 2018-06-23 23:32:41 -04:00
parent 39686cd7f0
commit ae36661661

View File

@ -2688,19 +2688,6 @@ P <optional> <replaceable>years</>-<replaceable>months</>-<replaceable>days</> <
to each field if any field is negative.
</para>
<para>
Internally <type>interval</> 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</> subtraction,
this storage method works well in most cases. Functions
<function>justify_days</> and <function>justify_hours</> 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
@ -2752,6 +2739,33 @@ P <optional> <replaceable>years</>-<replaceable>months</>-<replaceable>days</> <
</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">