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:42 -04:00
parent 2d502b8128
commit b6e94b820a

View File

@ -2670,19 +2670,6 @@ P <optional> <replaceable>years</replaceable>-<replaceable>months</replaceable>-
to each field if any field is negative. to each field if any field is negative.
</para> </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> <para>
In the verbose input format, and in some fields of the more compact In the verbose input format, and in some fields of the more compact
input formats, field values can have fractional parts; for example input formats, field values can have fractional parts; for example
@ -2734,6 +2721,33 @@ P <optional> <replaceable>years</replaceable>-<replaceable>months</replaceable>-
</tgroup> </tgroup>
</table> </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>
<sect2 id="datatype-interval-output"> <sect2 id="datatype-interval-output">