This section describes functions and operators for examining and manipulating
DATE
values.
Date Operators
addition of a variable
INTERVAL
SELECT DATE '1992-03-22' + INTERVAL (d.days) DAY FROM (VALUES (5), (11)) d(days)
1992-03-27 00:00:00
and
1992-04-02 00:00:00
subtraction of
DATE
s
DATE '1992-03-27' - DATE '1992-03-22'
subtraction of an
INTERVAL
DATE '1992-03-27' - INTERVAL 5 DAY
1992-03-22 00:00:00
subtraction of a variable
INTERVAL
SELECT DATE '1992-03-27' - INTERVAL (d.days) DAY FROM (VALUES (5), (11)) d(days)
1992-03-22 00:00:00
and
1992-03-16 00:00:00
date_diff(part, startdate, startdate)
The number of
part
boundaries between
startdate
and
enddate
, inclusive of the larger date and exclusive of the smaller date.
date_part(part, date)
Get
subfield
(equivalent to
extract
).
date_sub(part, startdate, enddate)
The signed length of the interval between
startdate
and
enddate
, truncated to whole multiples of
part
.
date_trunc(part, date)
Truncate to specified
precision
.
dayname(date)
The (English) name of the weekday.
extract(part from date)
Get
subfield
from a date.
greatest(date, date)
The later of two dates.
isfinite(date)
Returns true if the date is finite, false otherwise.
isinf(date)
Returns true if the date is infinite, false otherwise.
julian(date)
Extract the Julian Day number from a date.
last_day(date)
The last day of the corresponding month in the date.
least(date, date)
The earlier of two dates.
make_date(year, month, day)
The date for the given parts.
monthname(date)
The (English) name of the month.
strftime(date, format)
Converts a date to a string according to the
format string
.
time_bucket(bucket_width, date[, offset])
Truncate
date
to a grid of width
bucket_width
. The grid is anchored at
2000-01-01[ + offset]
when
bucket_width
is a number of months or coarser units, else
2000-01-03[ + offset]
. Note that
2000-01-03
is a Monday.
time_bucket(bucket_width, date[, origin])
Truncate
timestamptz
to a grid of width
bucket_width
. The grid is anchored at the
origin
timestamp, which defaults to
2000-01-01
when
bucket_width
is a number of months or coarser units, else
2000-01-03
. Note that
2000-01-03
is a Monday.
today()
Current date (start of current transaction) in the local time zone.
Description
The number of
part
boundaries between
startdate
and
enddate
, inclusive of the larger date and exclusive of the smaller date.
Example
date_diff('month', DATE '1992-09-15', DATE '1992-11-14')
Result
Alias
datediff
Description
The signed length of the interval between
startdate
and
enddate
, truncated to whole multiples of
part
.
Example
date_sub('month', DATE '1992-09-15', DATE '1992-11-14')
Result
Alias
datesub
Description
Truncate
date
to a grid of width
bucket_width
. The grid is anchored at
2000-01-01[ + offset]
when
bucket_width
is a number of months or coarser units, else
2000-01-03[ + offset]
. Note that
2000-01-03
is a Monday.
Example
time_bucket(INTERVAL '2 months', DATE '1992-04-20', INTERVAL '1 month')
Result
1992-04-01
Description
Truncate
timestamptz
to a grid of width
bucket_width
. The grid is anchored at the
origin
timestamp, which defaults to
2000-01-01
when
bucket_width
is a number of months or coarser units, else
2000-01-03
. Note that
2000-01-03
is a Monday.
Example
time_bucket(INTERVAL '2 weeks', DATE '1992-04-20', DATE '1992-04-01')
Result
1992-04-15
There are also dedicated extraction functions to get the
subfields
.
A few examples include extracting the day from a date, or the day of the week from a date.
Functions applied to infinite dates will either return the same infinite dates
(e.g.,
greatest
) or
NULL
(e.g.,
date_part
) depending on what “makes sense”.
In general, if the function needs to examine the parts of the infinite date, the result will be
NULL
.