+
Date/Time Functions
|
- Function
- Returns
+ Name
+ Return Type
Description
Example
+ Result
+
- |
- abstime(timestamp)
- abstime
- convert to abstime
- abstime(timestamp 'now')
-
+
+
|
age(timestamp)
interval
- preserve months and years
+ Subtract argument from current date, preserve years and months and days
age(timestamp '1957-06-13')
+ 43 years 8 mons 3 days
+
|
- age(timestamp,timestamp)
+ age(timestamp, timestamp)
interval
preserve months and years
age('now', timestamp '1957-06-13')
+
+]]>
+
|
- date_part(text,timestamp)
+ current_date
+ date
+
+ returns current date; see also
+ linkend="functions-datetime-current">below
+
+
+
+
+
+ |
+ current_time
+ time
+
+ returns current time (of day); see also
+ linkend="functions-datetime-current">below
+
+
+
+
+
+ |
+ current_timestamp
+ timestamp
+
+ returns current date and time; see also
+ linkend="functions-datetime-current">below
+
+
+
+
+
+ |
+ date_part(text, timestamp)
double precision
- portion of date
- date_part('dow',timestamp 'now')
+
+ extract subfield from date/time value (equivalent to
+
extract); see also
+ linkend="functions-datetime-datepart">below
+
+ date_part('hour', timestamp '2001-02-16 20:38:40')
+ 20
+
|
- date_part(text,interval)
+ date_part(text, interval)
double precision
- portion of time
- date_part('hour',interval '4 hrs 3 mins')
+
+ extract subfield from interval value (equivalent to
+
extract); see also
+ linkend="functions-datetime-datepart">below
+
+ date_part('month', interval '2 years 3 months')
+ 3
+
|
- date_trunc(text,timestamp)
+ date_trunc(text, timestamp)
timestamp
- truncate date
- date_trunc('month',abstime 'now')
+
+ truncate date to specified precision; see also
+ linkend="functions-datetime-trunc">below
+
+ date_trunc('hour', timestamp '2001-02-16 20:38:40')
+ 2001-02-16 20:00:00+00
+
|
- interval(reltime)
- interval
- convert to interval
- interval(reltime '4 hours')
+ extract(identifier from timestamp)
+ double precision
+
+ extract subfield from date/time value; see also
+ linkend="functions-datetime-extract">below
+
+ extract(hour from timestamp '2001-02-16 20:38:40')
+ 20
+
+ |
+ extract(identifier from interval)
+ double precision
+
+ extract subfield from interval value; see also
+ linkend="functions-datetime-extract">below
+
+ extract(month from interval '2 years 3 months')
+ 3
+
+
|
isfinite(timestamp)
- bool
- a finite time?
- isfinite(timestamp 'now')
+ boolean
+ Returns true if the time stamp is finite (neither invalid nor infinity)
+ isfinite(timestamp '2001-02-16 21:28:30')
+ true
+
|
isfinite(interval)
- bool
- a finite time?
- isfinite(interval '4 hrs')
+ boolean
+ Returns true if the interval is finite in length
+ isfinite(interval '4 hours')
+ true
+
|
- reltime(interval)
- reltime
- convert to reltime
- reltime(interval '4 hrs')
+ now()
+ timestamp
+
+ returns current date and time (equivalent to
+
current_timestamp); see also
+ linkend="functions-datetime-current">below
+
+
+
+
|
timestamp(date)
timestamp
- convert to timestamp
- timestamp(date 'today')
+ convert date to timestamp
+ timestamp(date '2000-12-25')
+ 2000-12-25 00:00:00
+
|
- timestamp(date,time)
+ timestamp(date, time)
timestamp
- convert to timestamp
- timestamp(timestamp '1998-02-24',time '23:07');
-
- |
- to_char(timestamp,text)
- text
- convert to string
- to_char(timestamp '1998-02-24','DD');
+ combine date and time into a timestamp
+ timestamp(date '1998-02-24',time '23:07')
+ 1998-02-24 23:07:00
+
+
+
+
EXTRACT, date_part
+
+
+EXTRACT (field FROM source)
+
+
+ The extract function retrieves sub-fields
+ from date/time values, such as year or hour.
+ source is a value expression that
+ evaluates to type timestamp or interval.
+ (Expressions of type date or time will
+ be cast to timestamp and can therefore be used as
+ well.) field is an identifier (not a
+ string!) that selects what field to extract from the source value.
+ The extract function returns values of type
+ double precision.
+ The following are valid values:
+
+
+
+
+ century
+
+ The year field divided by 100
+
+
+
+
+SELECT EXTRACT(CENTURY FROM TIMESTAMP '2001-02-16 20:38:40');
+Result: 20
+
+
+
+ Note that this is not really the century that the date is in.
+
+
+
+
+
+ day
+
+ The day (of the month) field (1 - 31)
+
+
+
+
+SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
+Result: 16
+
+
+
+
+
+
+ decade
+
+ The year field divided by 10
+
+
+
+
+SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40');
+Result: 200
+
+
+
+
+
+
+ dow
+
+ The day of the week (0 - 6; Sunday is 0) (for
+ timestamp values only)
+
+
+
+
+SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40');
+Result: 5
+
+
+
+
+
+
+ doy
+
+ The day of the year (1 - 365/366) (for timestamp values only)
+
+
+
+SELECT EXTRACT(DOY FROM TIMESTAMP '2001-02-16 20:38:40');
+Result: 47
+
+
+
+
+
+
+ epoch
+
+ For date and timestamp values, the
+ number of seconds since 1970-01-01 00:00:00 (Result may be
+ negative.); for interval values, the total number
+ of seconds in the interval
+
+
+
+
+SELECT EXTRACT(EPOCH FROM TIMESTAMP '2001-02-16 20:38:40');
+Result: 982352320
+
+SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours');
+Result: 442800
+
+
+
+
+
+
+ hour
+
+ The hour field (0 - 23)
+
+
+
+
+SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40');
+Result: 20
+
+
+
+
+
+
+ microseconds
+
+ The seconds field, including fractional parts, multiplied by 1
+ 000 000. Note that this includes full seconds.
+
+
+
+
+SELECT EXTRACT(MICROSECONDS FROM TIME '17:12:28.5');
+Result: 28500000
+
+
+
+
+
+
+ millennium
+
+ The year field divided by 1000
+
+
+
+
+SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2001-02-16 20:38:40');
+Result: 2
+
+
+
+ Note that this is not really the millennium that the date is in.
+
+
+
+
+
+ milliseconds
+
+ The seconds field, including fractional parts, multiplied by
+ 1000. Note that this includes full seconds.
+
+
+
+
+SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5');
+Result: 28500
+
+
+
+
+
+
+ minute
+
+ The minutes field (0 - 59)
+
+
+
+
+SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40');
+Result: 38
+
+
+
+
+
+
+ month
+
+ For timestamp values, the number of the month
+ within the year (1 - 12) ; for interval values
+ the number of months, modulo 12 (0 - 11)
+
+
+
+
+SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40');
+Result: 2
+
+SELECT EXTRACT(MONTH FROM INTERVAL '2 years 3 months');
+Result: 3
+
+SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months');
+Result: 1
+
+
+
+
+
+
+ quarter
+
+ The quarter of the year (1 - 4) that the day is in (for
+ timestamp values only)
+
+
+
+
+SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40');
+Result: 1
+
+
+
+
+
+
+ second
+
+ The seconds field, including fractional parts (0 -
+ 5960 if leap seconds are
+ implemented by the operating system)
+
+
+
+
+SELECT EXTRACT(SECOND FROM TIMESTAMP '2001-02-16 20:38:40');
+Result: 40
+
+SELECT EXTRACT(SECOND FROM TIME '17:12:28.5');
+Result: 28.5
+
+
+
+
+
+
+ week
+
+ From a timestamp value, calculate the number of
+ the week of the year that the day is in. By definition
+ (
ISO 8601), the first week of a year
+ contains January 4 of that year. (The
ISO
+ week starts on Monday.) In other words, the first Thursday of
+ a year is in week 1 of that year.
+
+
+
+
+SELECT EXTRACT(WEEK FROM TIMESTAMP '2001-02-16 20:38:40');
+Result: 7
+
+
+
+
+
+
+ year
+
+ The year field
+
+
+
+
+SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40');
+Result: 2001
+
+
+
+
+
+
+
+
+
- For the
- date_part and date_trunc
- functions, arguments can be
- `year', `month',
- `day', `hour',
- `minute', and `second',
- as well as the more specialized quantities
- `decade', `century',
- `millennium', `millisecond',
- and `microsecond'.
- date_part allows `dow'
- to return day of week, 'week' to return the
- ISO-defined week of year, and `epoch' to return
- seconds since 1970 (for timestamp)
- or 'epoch' to return total elapsed seconds
- (for interval).
+ The extract function is primarily intended
+ for computational processing. For formatting date/time values for
+ display, see .
-
+
+ The date_part function is the traditional
+
Postgres equivalent to the
+
+date_part('field', source)
+
+ Note that here the field value needs to
+ be a string. The valid field values for
+ date_part are the same as for
+ extract.
+
+
+
+
+SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
+Result: 16
+
+SELECT date_part('hour', INTERVAL '4 hours 3 minutes')
+Result: 4
+
+
+
+
+
+
+
date_trunc
+
+ The function date_trunc is conceptually
+ similar to the trunc function for numbers.
+
+
+
+date_trunc('field', source)
+
+ source is a value expression of type
+ timestamp (values of type date and
+ time are cast automatically).
+ field selects to which precision to
+ truncate the time stamp value. The return value is of type
+ timestamp with all fields that are less than the
+ selected one set to zero (or one, for day and month).
+
+
+ Valid values for field are:
+
+ microseconds
+ milliseconds
+ second
+ minute
+ hour
+ day
+ month
+ year
+ decade
+ century
+ millennium
+
+
+
+
+
+SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
+Result: 2001-02-16 20:00:00+00
+
+SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40');
+Result: 2001-01-01 00:00:00+00
+
+
+
+
+
+
+
Current Date/Time
+
+ The following functions are available to select the current date and/or time:
+
+CURRENT_TIME
+CURRENT_DATE
+CURRENT_TIMESTAMP
+
+ Note that because of the requirements of the
+
SQL standard, these functions must not be
+ called with trailing parentheses.
+
+
+
+
+SELECT CURRENT_TIME;
+19:07:13
+
+SELECT CURRENT_DATE;
+2001-02-17
+
+SELECT CURRENT_TIMESTAMP;
+2001-02-17 19:07:32+00
+
+
+
+ The function now() is the traditional
+ CURRENT_TIMESTAMP.
+
Postgres furthermore has special
+ date/time constants
that can be used to specify the
+ current time. The following three all return the same result:
+SELECT CURRENT_TIMESTAMP;
+SELECT now();
+SELECT TIMESTAMP 'now';
+
+
+ You do not want to use the third form when specifying a DEFAULT
+ value when creating a table. The system will immediately
+ evaluate the constant, thus when the default value is needed,
+ the time of the table creation would be used! The first two
+ forms will not be evaluated until the default value is used,
+ because they are function calls.
+
+
+
+
+
|
isclosed(path)
- bool
+ boolean
a closed path?
isclosed(path '((0,0),(1,1),(2,0))')
|
isopen(path)
- bool
+ boolean
an open path?
isopen(path '[(0,0),(1,1),(2,0)]')
Conditional Expressions
- This section descibes the SQL-compliant conditional expressions
+ This section desc
ribes the SQL-compliant conditional expressions
The
SQL CASE expression is a
generic conditional expression, similar to if/else statements in
- other languages. CASE clauses can be used whereever
+ other languages. CASE clauses can be used wherever
an expression is valid. condition is an
- expression that returns a boolean result. If the result is true
+ expression that returns a boolean result. If the result is true
then the value of the CASE expression is
result. If the result is false any
subsequent WHEN clauses are searched in the same