titlesidebar_labeldescription
Date and time functions
Date and time
Date and time functions reference documentation.

This page describes the available functions to assist with performing time-based calculations.

:::info

Checking if tables contain a designated timestamp column can be done via the tables() and table_columns() functions which are described in the meta functions documentation page.

:::

systimestamp

systimestamp() - offset from UTC Epoch in microseconds. Calculates UTC timestamp using system’s real time clock. The value is affected by discontinuous jumps in the system time (e.g., if the system administrator manually changes the system time).

Arguments:

  • systimestamp() does not accept arguments.

Return value:

Return value type is timestamp.

Examples:

  1. INSERT INTO readings
  2. VALUES(systimestamp(), 123.5);
tsreading
2020-01-02T19:28:48.727516Z123.5

sysdate

sysdate() - returns the timestamp of the host system as a date with millisecond precision.

Calculates UTC date with millisecond precision using system’s real time clock. The value is affected by discontinuous jumps in the system time (e.g., if the system administrator manually changes the system time).

Arguments:

  • sysdate() does not accept arguments.

Return value:

Return value type is date.

Examples:

  1. INSERT INTO readings
  2. VALUES(sysdate(), 123.5);
sysdatereading
2020-01-02T19:28:48.727516Z123.5
  1. SELECT * FROM readings
  2. WHERE date_time > sysdate() - 60000000L;

now

now() - offset from UTC Epoch in microseconds.

Calculates UTC timestamp using system’s real time clock. Unlike sysdatetime(), it does not change within the query execution timeframe and should be used in WHERE clause to filter designated timestamp column relative to current time, i.e.:

  • SELECT now() FROM long_sequence(200) will return the same timestamp for all rows
  • SELECT systimestamp() FROM long_sequence(200) will have new timestamp values for each row

Arguments:

  • now() does not accept arguments.

Return value:

Return value type is timestamp.

Examples:

  1. SELECT created, origin FROM telemetry
  2. WHERE created > dateadd('d', -1, now());
createdorigin
2021-02-01T21:51:34.443726Z1
  1. SELECT now() FROM long_sequence(3)
now
2021-02-01T21:51:34.443726Z
2021-02-01T21:51:34.443726Z
2021-02-01T21:51:34.443726Z
  1. SELECT * FROM readings
  2. WHERE date_time > now() - 60000000L;

to_timestamp

to_timestamp(string, format) - converts string to timestamp by using the supplied format to extract the value.

Will convert a string to timestamp using the format definition passed as an argument. When the format definition does not match the string input, the result will be null.

For more information about recognized timestamp formats, see the date and timestamp format section.

Arguments:

  • string is any string that represents a date and/or time.
  • format is a string that describes the timestamp format in which string is expressed.

Return value:

Return value type is timestamp

Examples:

  1. SELECT to_timestamp('2020-03-01:15:43:21', 'yyyy-MM-dd:HH:mm:ss')
  2. FROM long_sequence(1);
to_timestamp
2020-03-01T15:43:21.000000Z
  1. SELECT to_timestamp('2020-03-01:15:43:21', 'yyyy')
  2. FROM long_sequence(1);
to_timestamp
null
  1. INSERT INTO measurements
  2. values(to_timestamp('2019-12-12T12:15', 'yyyy-MM-ddTHH:mm'), 123.5);
timestampvalue
2019-12-12T12:15:00.000000Z123.5

Note that conversion of ISO timestamp format is optional. QuestDB automatically converts STRING to TIMESTAMP if it is partial or full form of yyyy-MM-ddTHH:mm:ss.SSSUUU or yyyy-MM-dd HH:mm:ss.SSSUUU with valid time offset +01:00 or Z. See more examples at Native timestamp format

to_date

to_date(string, format) - converts string to date by using the supplied format to extract the value.

Will convert a string to date using the format definition passed as an argument. When the format definition does not match the string input, the result will be null.

For more information about recognized timestamp formats, see the date and timestamp format section.

Arguments:

  • string is any string that represents a date and/or time.
  • format is a string that describes the date format in which string is expressed.

Return value:

Return value type is date

Examples:

  1. SELECT to_date('2020-03-01:15:43:21', 'yyyy-MM-dd:HH:mm:ss')
  2. FROM long_sequence(1);
to_date
2020-03-01T15:43:21.000Z
  1. SELECT to_date('2020-03-01:15:43:21', 'yyyy')
  2. FROM long_sequence(1);
to_date
null
  1. INSERT INTO measurements
  2. values(to_date('2019-12-12T12:15', 'yyyy-MM-ddTHH:mm'), 123.5);
datevalue
2019-12-12T12:15:00.000Z123.5

to_str

to_str(value, format) - converts date or timestamp value to a string in the specified format

Will convert a date or timestamp value to a string using the format definition passed as an argument. When elements in the format definition are unrecognized, they will be passed-through as string.

For more information about recognized timestamp formats, see the date and timestamp format section.

Arguments:

  • value is any date or timestamp
  • format is a timestamp format.

Return value:

Return value type is string

Examples:

  • Basic example
  1. SELECT to_str(systimestamp(), 'yyyy-MM-dd') FROM long_sequence(1);
to_str
2020-03-04
  • With unrecognized timestamp definition
  1. SELECT to_str(systimestamp(), 'yyyy-MM-dd gooD DAY 123') FROM long_sequence(1);
to_str
2020-03-04 gooD DAY 123

dateadd

dateadd(period, n, startDate) - adds n period to startDate.

Arguments:

  • period is a char. Period to be added. Available periods are s, m, h, d, M, y.
  • n is an int. Number of periods to add.
  • startDate is a timestamp or date. Timestamp to add the periods to.

Return value:

Return value type is timestamp

Examples:

  1. SELECT systimestamp(), dateadd('h', 2, systimestamp())
  2. FROM long_sequence(1);
systimestampdateadd
2020-04-17T00:30:51.380499Z2020-04-17T02:30:51.380499Z
  1. SELECT systimestamp(), dateadd('d', 2, systimestamp())
  2. FROM long_sequence(1);
systimestampdateadd
2020-04-17T00:30:51.380499Z2020-04-19T00:30:51.380499Z
  1. SELECT systimestamp(), dateadd('M', 2, systimestamp())
  2. FROM long_sequence(1);
systimestampdateadd
2020-04-17T00:30:51.380499Z2020-06-17T00:30:51.380499Z

datediff

datediff(period, date1, date2) - returns the absolute number of period between date1 and date2.

Arguments:

  • period is a char. Period to be added. Available periods are s, m, h, d, M, y.
  • date1 and date2 are date or timestamp. Dates to compare

Return value:

Return value type is int

Examples:

  1. select datediff(
  2. 'd',
  3. to_timestamp('2020-01-23','yyyy-MM-dd'),
  4. to_timestamp('2020-01-27','yyyy-MM-dd'))
  5. from long_sequence(1);
datediff
4
  1. select datediff(
  2. 'M',
  3. to_timestamp('2020-01-23','yyyy-MM-dd'),
  4. to_timestamp('2020-02-24','yyyy-MM-dd'))
  5. from long_sequence(1);
datediff
1

millis

millis(value) - returns the millis of the second for a given date or timestamp from 0 to 999

Arguments:

  • value is any timestamp or date

Return value:

Return value type is int

Examples:

  1. SELECT millis(
  2. to_timestamp('2020-03-01:15:43:21.123456', 'yyyy-MM-dd:HH:mm:ss.SSSUUU'))
  3. FROM long_sequence(1);
millis
123
  1. select millis(ts), count() from transactions;
secondcount
02323
16548
9989876
9992567

micros

micros(value) - returns the micros of the millisecond for a given date or timestamp from 0 to 999

Arguments:

  • value is any timestamp or date

Return value:

Return value type is int

Examples:

  1. SELECT micros(to_timestamp('2020-03-01:15:43:21.123456', 'yyyy-MM-dd:HH:mm:ss.SSSUUU'))
  2. FROM long_sequence(1);
millis
456
  1. select micros(ts), count() from transactions;
secondcount
02323
16548
9989876
9992567

second

second(value) - returns the second of the minute for a given date or timestamp from 0 to 59

Arguments:

  • value is any timestamp or date

Return value:

Return value type is int

Examples:

  1. SELECT second(to_timestamp('2020-03-01:15:43:21', 'yyyy-MM-dd:HH:mm:ss'))
  2. FROM long_sequence(1);
second
43
  1. select second(ts), count() from transactions;
secondcount
02323
16548
589876
592567

minute

minute(value) - returns the minute of the hour for a given date or timestamp from 0 to 59

Arguments:

  • value is any timestamp or date

Return value:

Return value type is int

Examples:

  1. SELECT minute(to_timestamp('2020-03-01:15:43:21', 'yyyy-MM-dd:HH:mm:ss'))
  2. FROM long_sequence(1);
minute
43
  1. select minute(ts), count() from transactions;
minutecount
02323
16548
589876
592567

hour

hour(value) - returns the hour of day for a given date or timestamp from 0 to 23

Arguments:

  • value is any timestamp or date

Return value:

Return value type is int

Examples:

  1. SELECT hour(to_timestamp('2020-03-01:15:43:21', 'yyyy-MM-dd:HH:mm:ss'))
  2. FROM long_sequence(1);
hour
12
  1. select hour(ts), count() from transactions;
hourcount
02323
16548
229876
232567

day

day(value) - returns the day of month for a given date or timestamp from 0 to 23

Arguments:

  • value is any timestamp or date

Return value:

Return value type is int

Examples:

  1. SELECT day(to_timestamp('2020-03-01:15:43:21', 'yyyy-MM-dd:HH:mm:ss'))
  2. FROM long_sequence(1);
day
01
  1. select day(ts), count() from transactions;
daycount
12323
26548
309876
312567

month

month(value) - returns the month of year for a given date or timestamp from 1 to 12

Arguments:

  • value is any timestamp or date

Return value:

Return value type is int

Examples:

  1. SELECT month(to_timestamp('2020-03-01:15:43:21', 'yyyy-MM-dd:HH:mm:ss'))
  2. FROM long_sequence(1);
month
03
  1. select month(ts), count() from transactions;
monthcount
12323
26548
119876
122567

year

year(value) - returns the year for a given date or timestamp

Arguments:

  • value is any timestamp or date

Return value:

Return value type is int

Examples:

  1. SELECT year(to_timestamp('2020-03-01:15:43:21', 'yyyy-MM-dd:HH:mm:ss'))
  2. FROM long_sequence(1);
year
2020
  1. select month(ts), count() from transactions;
yearcount
20152323
20169876
20172567

is_leap_year

is_leap_year(value) - returns true if the year of value is a leap year, false otherwise.

Arguments:

  • value is any timestamp or date

Return value:

Return value type is boolean

Examples:

  1. select year(ts), is_leap_year(ts) from myTable;
yearis_leap_year
2020true
2021false
2022false
2023false
2024true
2025false

days_in_month

days_in_month(value) - returns the number of days in a month from a provided timestamp or date.

Arguments:

  • value is any timestamp or date

Return value:

Return value type is int

Examples:

  1. select month(ts), days_in_month(ts) from myTable;
monthdays_in_month
430
531
630
731
831

day_of_week

day_of_week(value) - returns the day number in a week from 1 (Monday) to 7 (Sunday)

Arguments:

  • value is any timestamp or date

Return value:

Return value type is int

Examples:

  1. select to_str(ts,'EE'),day_of_week(ts) from myTable;
dayday_of_week
Monday1
Tuesday2
Wednesday3
Thursday4
Friday5
Saturday6
Sunday7

day_of_week_sunday_first

day_of_week_sunday_first(value) - returns the day number in a week from 1 (Sunday) to 7 (Saturday)

Arguments:

  • value is any timestamp or date

Return value:

Return value type is int

Examples:

  1. select to_str(ts,'EE'),day_of_week_sunday_first(ts) from myTable;
dayday_of_week_sunday_first
Monday2
Tuesday3
Wednesday4
Thursday5
Friday6
Saturday7
Sunday1

Date and Timestamp format

Format is a combination of letters from table below combined with arbitrary text. Format letters are case-sensitive and are used as is (e.g. without any prefix)

LetterDate or Time ComponentPresentationExamples
GEra designatorTextAD
yYearYear1996; 96
YWeek yearYear2009; 09
MMonth in yearMonthJuly; Jul; 07
wWeek in yearNumber27
WWeek in monthNumber2
DDay in yearNumber189
dDay in monthNumber10
FDay of week in monthNumber2
EDay name in weekTextTuesday; Tue
uDay number of week (1 = Monday, …, 7 = Sunday)Number1
aAm/pm markerTextPM
HHour in day (0-23)Number0
kHour in day (1-24)Number24
KHour in am/pm (0-11)Number0
hHour in am/pm (1-12)Number12
mMinute in hourNumber30
sSecond in minuteNumber55
SMillisecondNumber978
zTime zoneGeneral time zonePacific Standard Time; PST; GMT-08:00
ZTime zoneRFC 822 time zone-0800
XTime zoneISO 8601 time zone-08; -0800; -08:00
UMicrosecondNumber698

See also