6.13. Date and Time Functions and Operators
Date and Time Operators
Operator | Example | Result |
---|---|---|
+ |
date '2012-08-08' + interval '2' day |
2012-08-10 |
+ |
time '01:00' + interval '3' hour |
04:00:00.000 |
+ |
timestamp '2012-08-08 01:00' + interval '29' hour |
2012-08-09 06:00:00.000 |
+ |
timestamp '2012-10-31 01:00' + interval '1' month |
2012-11-30 01:00:00.000 |
+ |
interval '2' day + interval '3' hour |
2 03:00:00.000 |
+ |
interval '3' year + interval '5' month |
3-5 |
- |
date '2012-08-08' - interval '2' day |
2012-08-06 |
- |
time '01:00' - interval '3' hour |
22:00:00.000 |
- |
timestamp '2012-08-08 01:00' - interval '29' hour |
2012-08-06 20:00:00.000 |
- |
timestamp '2012-10-31 01:00' - interval '1' month |
2012-09-30 01:00:00.000 |
- |
interval '2' day - interval '3' hour |
1 21:00:00.000 |
- |
interval '3' year - interval '5' month |
2-7 |
Time Zone Conversion
The AT TIME ZONE
operator sets the time zone of a timestamp:
- SELECT timestamp '2012-10-31 01:00 UTC';
- 2012-10-31 01:00:00.000 UTC
- SELECT timestamp '2012-10-31 01:00 UTC' AT TIME ZONE 'America/Los_Angeles';
- 2012-10-30 18:00:00.000 America/Los_Angeles
Date and Time Functions
currentdate -> date
Returns the current date as of the start of the query.
current_time -> time with time zone
Returns the current time as of the start of the query.
current_timestamp -> timestamp with time zone
Returns the current timestamp as of the start of the query.
current_timezone
() → varchar
Returns the current time zone in the format defined by IANA(e.g.,America/Los_Angeles
) or as fixed offset from UTC (e.g.,+08:35
)
date
(_x) → date
This is an alias forCAST(x AS date)
.
fromiso8601_timestamp
(_string) → timestamp with time zone
Parses the ISO 8601 formattedstring
into atimestamp with time zone
.
fromiso8601_date
(_string) → date
Parses the ISO 8601 formattedstring
into adate
.
fromunixtime
(_unixtime) → timestamp
Returns the UNIX timestampunixtime
as a timestamp.
fromunixtime
(_unixtime, string) → timestamp with time zone
Returns the UNIX timestampunixtime
as a timestamp with time zoneusingstring
for the time zone.
fromunixtime
(_unixtime, hours, minutes) → timestamp with time zone
Returns the UNIX timestampunixtime
as a timestamp with time zoneusinghours
andminutes
for the time zone offset.
localtime -> time
Returns the current time as of the start of the query.
localtimestamp -> timestamp
Returns the current timestamp as of the start of the query.
now
() → timestamp with time zone
This is an alias forcurrenttimestamp
.
to_iso8601
(_x) → varchar
Formatsx
as an ISO 8601 string.x
can be date, timestamp, ortimestamp with time zone.
tomilliseconds
(_interval) → bigint
Returns the day-to-secondinterval
as milliseconds.
tounixtime
(_timestamp) → double
Returnstimestamp
as a UNIX timestamp.
Note
The following SQL-standard functions do not use parenthesis:
- current_date
- current_time
- current_timestamp
- localtime
- localtimestamp
Truncation Function
The date_trunc
function supports the following units:
Unit | Example Truncated Value |
---|---|
second |
2001-08-22 03:04:05.000 |
minute |
2001-08-22 03:04:00.000 |
hour |
2001-08-22 03:00:00.000 |
day |
2001-08-22 00:00:00.000 |
week |
2001-08-20 00:00:00.000 |
month |
2001-08-01 00:00:00.000 |
quarter |
2001-07-01 00:00:00.000 |
year |
2001-01-01 00:00:00.000 |
The above examples use the timestamp 2001-08-22 03:04:05.321
as the input.
datetrunc
(_unit, x) → [same as input]
Returnsx
truncated tounit
.
Interval Functions
The functions in this section support the following interval units:
Unit | Description |
---|---|
millisecond |
Milliseconds |
second |
Seconds |
minute |
Minutes |
hour |
Hours |
day |
Days |
week |
Weeks |
month |
Months |
quarter |
Quarters of a year |
year |
Years |
dateadd
(_unit, value, timestamp) → [same as input]
Adds an intervalvalue
of typeunit
totimestamp
.Subtraction can be performed by using a negative value.
datediff
(_unit, timestamp1, timestamp2) → bigint
Returnstimestamp2 - timestamp1
expressed in terms ofunit
.
Duration Function
The parse_duration
function supports the following units:
Unit | Description |
---|---|
ns |
Nanoseconds |
us |
Microseconds |
ms |
Milliseconds |
s |
Seconds |
m |
Minutes |
h |
Hours |
d |
Days |
parseduration
(_string) → interval
Parsesstring
of formatvalue unit
into an interval, wherevalue
is fractional number ofunit
values:- SELECT parse_duration('42.8ms'); — 0 00:00:00.043
SELECT parse_duration('3.81 d'); — 3 19:26:24.000
SELECT parse_duration('5m'); — 0 00:05:00.000
- SELECT parse_duration('42.8ms'); — 0 00:00:00.043
MySQL Date Functions
The functions in this section use a format string that is compatible withthe MySQL date_parse
and str_to_date
functions. The following table,based on the MySQL manual, describes the format specifiers:
Specifier | Description |
---|---|
%a |
Abbreviated weekday name (Sun .. Sat ) |
%b |
Abbreviated month name (Jan .. Dec ) |
%c |
Month, numeric (1 .. 12 ) [4] |
%D |
Day of the month with English suffix (0th , 1st , 2nd , 3rd , …) |
%d |
Day of the month, numeric (01 .. 31 ) [4] |
%e |
Day of the month, numeric (1 .. 31 ) [4] |
%f |
Fraction of second (6 digits for printing: 000000 .. 999000 ; 1 - 9 digits for parsing: 0 .. 999999999 ) [1] |
%H |
Hour (00 .. 23 ) |
%h |
Hour (01 .. 12 ) |
%I |
Hour (01 .. 12 ) |
%i |
Minutes, numeric (00 .. 59 ) |
%j |
Day of year (001 .. 366 ) |
%k |
Hour (0 .. 23 ) |
%l |
Hour (1 .. 12 ) |
%M |
Month name (January .. December ) |
%m |
Month, numeric (01 .. 12 ) [4] |
%p |
AM or PM |
%r |
Time, 12-hour (hhss followed by AM or PM ) |
%S |
Seconds (00 .. 59 ) |
%s |
Seconds (00 .. 59 ) |
%T |
Time, 24-hour (hhss ) |
%U |
Week (00 .. 53 ), where Sunday is the first day of the week |
%u |
Week (00 .. 53 ), where Monday is the first day of the week |
%V |
Week (01 .. 53 ), where Sunday is the first day of the week; used with %X |
%v |
Week (01 .. 53 ), where Monday is the first day of the week; used with %x |
%W |
Weekday name (Sunday .. Saturday ) |
%w |
Day of the week (0 .. 6 ), where Sunday is the first day of the week [3] |
%X |
Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V |
%x |
Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v |
%Y |
Year, numeric, four digits |
%y |
Year, numeric (two digits) [2] |
%% |
A literal % character |
%x |
x , for any x not listed above |
|[1]|Timestamp is truncated to milliseconds.
|[2]|When parsing, two-digit year format assumes range 1970
.. 2069
, so “70” will result in year 1970
but “69” will produce 2069
.
|[3]|This specifier is not supported yet. Consider using day_of_week()
(it uses 1-7
instead of 0-6
).
|[4]|(1, 2, 3, 4) This specifier does not support 0
as a month or day.
Warning
The following specifiers are not currently supported: %D %U %u %V %w %X
dateformat
(_timestamp, format) → varchar
Formatstimestamp
as a string usingformat
.
dateparse
(_string, format) → timestamp
Parsesstring
into a timestamp usingformat
.
Java Date Functions
The functions in this section use a format string that is compatible withJodaTime’s DateTimeFormat pattern format.
formatdatetime
(_timestamp, format) → varchar
Formatstimestamp
as a string usingformat
.
parsedatetime
(_string, format) → timestamp with time zone
Parsesstring
into a timestamp with time zone usingformat
.
Extraction Function
The extract
function supports the following fields:
Field | Description |
---|---|
YEAR |
year() |
QUARTER |
quarter() |
MONTH |
month() |
WEEK |
week() |
DAY |
day() |
DAY_OF_MONTH |
day() |
DAY_OF_WEEK |
day_of_week() |
DOW |
day_of_week() |
DAY_OF_YEAR |
day_of_year() |
DOY |
day_of_year() |
YEAR_OF_WEEK |
year_of_week() |
YOW |
year_of_week() |
HOUR |
hour() |
MINUTE |
minute() |
SECOND |
second() |
TIMEZONE_HOUR |
timezone_hour() |
TIMEZONE_MINUTE |
timezone_minute() |
The types supported by the extract
function vary depending on thefield to be extracted. Most fields support all date and time types.
extract
(field FROM x) → bigint
Returnsfield
fromx
.
Note
This SQL-standard function uses special syntax for specifying the arguments.
Convenience Extraction Functions
day
(x) → bigint
Returns the day of the month fromx
.
dayof_month
(_x) → bigint
This is an alias forday()
.
dayof_week
(_x) → bigint
Returns the ISO day of the week fromx
.The value ranges from1
(Monday) to7
(Sunday).
dayof_year
(_x) → bigint
Returns the day of the year fromx
.The value ranges from1
to366
.
dow
(x) → bigint
This is an alias forday_of_week()
.
doy
(x) → bigint
This is an alias forday_of_year()
.
hour
(x) → bigint
Returns the hour of the day fromx
.The value ranges from0
to23
.
minute
(x) → bigint
Returns the minute of the hour fromx
.
month
(x) → bigint
Returns the month of the year fromx
.
quarter
(x) → bigint
Returns the quarter of the year fromx
.The value ranges from1
to4
.
second
(x) → bigint
Returns the second of the minute fromx
.
timezonehour
(_timestamp) → bigint
Returns the hour of the time zone offset fromtimestamp
.
timezoneminute
(_timestamp) → bigint
Returns the minute of the time zone offset fromtimestamp
.
week
(x) → bigint
Returns the ISO week of the year fromx
.The value ranges from1
to53
.
weekof_year
(_x) → bigint
This is an alias forweek()
.
year
(x) → bigint
Returns the year fromx
.
yearof_week
(_x) → bigint
Returns the year of the ISO week fromx
.
yow
(x) → bigint
This is an alias foryear_of_week()
.
原文: https://prestodb.io/docs/current/functions/datetime.html