Skip to main content

Timestamp Functions

This section describes functions and operators for examining and manipulating TIMESTAMP values.

Timestamp Operators​

The table below shows the available mathematical operators for TIMESTAMP types.

OperatorDescriptionExampleResult
+addition of an INTERVALTIMESTAMP '1992-03-22 01:02:03' + INTERVAL 5 DAY1992-03-27 01:02:03
-subtraction of TIMESTAMPsTIMESTAMP '1992-03-27' - TIMESTAMP '1992-03-22'5 days
-subtraction of an INTERVALTIMESTAMP '1992-03-27 01:02:03' - INTERVAL 5 DAY1992-03-22 01:02:03

Adding to or subtracting from infinite values produces the same infinite value.

Timestamp Functions​

The table below shows the available scalar functions for TIMESTAMP values.

FunctionDescriptionExampleResult
age(timestamp, timestamp)Subtract arguments, resulting in the time difference between the two timestampsage(TIMESTAMP '2001-04-10', TIMESTAMP '1992-09-20')8 years 6 months 20 days
age(timestamp)Subtract from current_dateage(TIMESTAMP '1992-09-20')29 years 1 month 27 days 12:39:00.844
century(timestamp)Extracts the century of a timestampcentury(TIMESTAMP '1992-03-22')20
date_diff(part, startdate, enddate)The number of partition boundaries between the timestampsdate_diff('hour', TIMESTAMP '1992-09-30 23:59:59', TIMESTAMP '1992-10-01 01:58:00')2
datediff(part, startdate, enddate)Alias of date_diff. The number of partition boundaries between the timestampsdatediff('hour', TIMESTAMP '1992-09-30 23:59:59', TIMESTAMP '1992-10-01 01:58:00')2
date_part(part, timestamp)Get subfield (equivalent to extract)date_part('minute', TIMESTAMP '1992-09-20 20:38:40')38
datepart(part, timestamp)Alias of date_part. Get subfield (equivalent to extract)datepart('minute', TIMESTAMP '1992-09-20 20:38:40')38
date_part([part, ...], timestamp)Get the listed subfields as a struct. The list must be constant.date_part(['year', 'month', 'day'], TIMESTAMP '1992-09-20 20:38:40'){year: 1992, month: 9, day: 20}
datepart([part, ...], timestamp)Alias of date_part. Get the listed subfields as a struct. The list must be constant.datepart(['year', 'month', 'day'], TIMESTAMP '1992-09-20 20:38:40'){year: 1992, month: 9, day: 20}
date_sub(part, startdate, enddate)The number of complete partitions between the timestampsdate_sub('hour', TIMESTAMP '1992-09-30 23:59:59', TIMESTAMP '1992-10-01 01:58:00')1
datesub(part, startdate, enddate)Alias of date_sub. The number of complete partitions between the timestampsdatesub('hour', TIMESTAMP '1992-09-30 23:59:59', TIMESTAMP '1992-10-01 01:58:00')1
date_trunc(part, timestamp)Truncate to specified precisiondate_trunc('hour', TIMESTAMP '1992-09-20 20:38:40')1992-09-20 20:00:00
datetrunc(part, timestamp)Alias of date_trunc. Truncate to specified precisiondatetrunc('hour', TIMESTAMP '1992-09-20 20:38:40')1992-09-20 20:00:00
dayname(timestamp)The (English) name of the weekdaydayname(TIMESTAMP '1992-03-22')Sunday
epoch(timestamp)Converts a timestamp to seconds since the epochepoch('2022-11-07 08:43:04'::TIMESTAMP);1667810584
epoch_ms(timestamp)Converts a timestamp to milliseconds since the epochepoch_ms('2022-11-07 08:43:04.123456'::TIMESTAMP);1667810584123
epoch_ms(ms)Converts ms since epoch to a timestampepoch_ms(701222400000)1992-03-22 00:00:00
epoch_us(timestamp)Converts a timestamp to microseconds since the epochepoch_us('2022-11-07 08:43:04.123456'::TIMESTAMP);1667810584123456
epoch_ns(timestamp)Converts a timestamp to nanoseconds since the epochepoch_ns('2022-11-07 08:43:04.123456'::TIMESTAMP);1667810584123456000
extract(field from timestamp)Get subfield from a timestampextract('hour' FROM TIMESTAMP '1992-09-20 20:38:48')20
greatest(timestamp, timestamp)The later of two timestampsgreatest(TIMESTAMP '1992-09-20 20:38:48', TIMESTAMP '1992-03-22 01:02:03.1234')1992-09-20 20:38:48
isfinite(timestamp)Returns true if the timestamp is finite, false otherwiseisfinite(TIMESTAMP '1992-03-07')true
isinf(timestamp)Returns true if the timestamp is infinite, false otherwiseisinf(TIMESTAMP '-infinity')true
last_day(timestamp)The last day of the month.last_day(TIMESTAMP '1992-03-22 01:02:03.1234')1992-03-31
least(timestamp, timestamp)The earlier of two timestampsleast(TIMESTAMP '1992-09-20 20:38:48', TIMESTAMP '1992-03-22 01:02:03.1234')1992-03-22 01:02:03.1234
make_timestamp(bigint, bigint, bigint, bigint, bigint, double)The timestamp for the given partsmake_timestamp(1992, 9, 20, 13, 34, 27.123456)1992-09-20 13:34:27.123456
make_timestamp(microseconds)The timestamp for the given number of µs since the epochmake_timestamp(1667810584123456)2022-11-07 08:43:04.123456
monthname(timestamp)The (English) name of the month.monthname(TIMESTAMP '1992-09-20')September
strftime(timestamp, format)Converts timestamp to string according to the format stringstrftime(timestamp '1992-01-01 20:38:40', '%a, %-d %B %Y - %I:%M:%S %p')Wed, 1 January 1992 - 08:38:40 PM
strptime(text, format)Converts string to timestamp according to the format string. Throws on failure.strptime('Wed, 1 January 1992 - 08:38:40 PM', '%a, %-d %B %Y - %I:%M:%S %p')1992-01-01 20:38:40
strptime(text, format-list)Converts string to timestamp applying the format strings in the list until one succeeds. Throws on failure.strptime('4/15/2023 10:56:00', ['%d/%m/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S'])2023-04-15 10:56:00
time_bucket(bucket_width, timestamp[, origin])Truncate timestamp by the specified interval bucket_width. Buckets are aligned relative to origin timestamp. origin defaults to 2000-01-03 00:00:00 for buckets that don't include a month or year interval, and to 2000-01-01 00:00:00 for month and year buckets.time_bucket(INTERVAL '2 weeks', TIMESTAMP '1992-04-20 15:26:00', TIMESTAMP '1992-04-01 00:00:00')1992-04-15 00:00:00
time_bucket(bucket_width, timestamp[, offset])Truncate timestamp by the specified interval bucket_width. Buckets are offset by offset interval.time_bucket(INTERVAL '10 minutes', TIMESTAMP '1992-04-20 15:26:00-07', INTERVAL '5 minutes')1992-04-20 15:25:00
to_timestamp(sec)Converts sec since epoch to a timestampto_timestamp(701222400)1992-03-22 00:00:00
try_strptime(text, format)Converts string to timestamp according to the format string. Returns NULL on failure.try_strptime('Wed, 1 January 1992 - 08:38:40 PM', '%a, %-d %B %Y - %I:%M:%S %p')1992-01-01 20:38:40
try_strptime(text, format-list)Converts string to timestamp applying the format strings in the list until one succeeds. Returns NULL on failure.try_strptime('4/15/2023 10:56:00', ['%d/%m/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S'])2023-04-15 10:56:00

There are also dedicated extraction functions to get the subfields.

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.

Timestamp Table Functions​

The table below shows the available table functions for TIMESTAMP types.

FunctionDescriptionExample
generate_series(timestamp, timestamp, interval)Generate a table of timestamps in the closed range, stepping by the intervalgenerate_series(TIMESTAMP '2001-04-10', TIMESTAMP '2001-04-11', INTERVAL 30 MINUTE)
range(timestamp, timestamp, interval)Generate a table of timestamps in the half open range, stepping by the intervalrange(TIMESTAMP '2001-04-10', TIMESTAMP '2001-04-11', INTERVAL 30 MINUTE)

Infinite values are not allowed as table function bounds.