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 datepart. 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.