Documentation
/ SQL
/ Functions
Date Functions
本节介绍用于检查和操作DATE
值的函数和运算符。
下表显示了可用于DATE
类型的数学运算符。
Operator |
Description |
Example |
Result |
+ |
天数相加(整数) |
DATE '1992-03-22' + 5 |
1992-03-27 |
+ |
添加一个INTERVAL |
DATE '1992-03-22' + INTERVAL 5 DAY |
1992-03-27 |
+ |
变量的加法 INTERVAL |
SELECT DATE '1992-03-22' + INTERVAL (d.days) DAY FROM (VALUES (5), (11)) AS d(days) |
1992-03-27 和 1992-04-02 |
- |
减去 DATE s |
DATE '1992-03-27' - DATE '1992-03-22' |
5 |
- |
减去一个INTERVAL |
DATE '1992-03-27' - INTERVAL 5 DAY |
1992-03-22 |
- |
变量的减法 INTERVAL |
SELECT DATE '1992-03-27' - INTERVAL (d.days) DAY FROM (VALUES (5), (11)) AS d(days) |
1992-03-22 和 1992-03-16 |
Adding to or subtracting from infinite values produces the same infinite value.
下表显示了可用于DATE
类型的函数。
日期也可以通过类型提升使用时间戳函数进行操作。
Name |
Description |
current_date |
当前日期(在当前事务开始时)以UTC表示。 |
date_add(date, interval) |
将时间间隔添加到日期。 |
date_diff(part, startdate, enddate) |
日期之间的分区边界数量。 |
date_part(part, date) |
获取子字段(等同于extract )。 |
date_sub(part, startdate, enddate) |
两个日期之间完整的分区数量。 |
date_trunc(part, date) |
截断到指定的精度。 |
datediff(part, startdate, enddate) |
日期之间的分区边界数量。date_diff 的别名。 |
datepart(part, date) |
获取子字段(等同于extract )。date_part 的别名。 |
datesub(part, startdate, enddate) |
日期之间完整的分区数量。date_sub 的别名。 |
datetrunc(part, date) |
截断到指定的精度。date_trunc 的别名。 |
dayname(date) |
星期几的(英文)名称。 |
extract(part from date) |
从日期中获取子字段。 |
greatest(date, date) |
两个日期中较晚的日期。 |
isfinite(date) |
如果日期是有限的,则返回 true,否则返回 false。 |
isinf(date) |
如果日期是无限的,则返回 true,否则返回 false。 |
last_day(date) |
日期对应月份的最后一天。 |
least(date, date) |
两个日期中较早的一个。 |
make_date(year, month, day) |
给定部分的日期。 |
monthname(date) |
月份的(英文)名称。 |
strftime(date, format) |
根据格式字符串将日期转换为字符串。 |
time_bucket(bucket_width, date[, offset]) |
将 date 截断为指定的间隔 bucket_width 。桶通过 offset 间隔进行偏移。 |
time_bucket(bucket_width, date[, origin]) |
将 date 截断为指定的间隔 bucket_width 。桶相对于 origin 日期对齐。对于不包含月或年间隔的桶,origin 默认为 2000-01-03,对于月和年桶,默认为 2000-01-01。 |
today() |
当前日期(当前事务的开始时间)以UTC表示。 |
描述 |
当前日期(在当前事务开始时)以UTC表示。 |
示例 |
current_date |
结果 |
2022-10-08 |
描述 |
将时间间隔添加到日期中。 |
示例 |
date_add(DATE '1992-09-15', INTERVAL 2 MONTH) |
结果 |
1992-11-15 |
描述 |
日期之间的分区边界数量。 |
示例 |
date_diff('month', DATE '1992-09-15', DATE '1992-11-14') |
Result |
2 |
描述 |
获取子字段(等同于extract )。 |
示例 |
date_part('year', DATE '1992-09-20') |
结果 |
1992 |
描述 |
两个日期之间完整的分区数量。 |
示例 |
date_sub('month', DATE '1992-09-15', DATE '1992-11-14') |
Result |
1 |
Description |
Truncate to specified precision. |
示例 |
date_trunc('month', DATE '1992-03-07') |
结果 |
1992-03-01 |
描述 |
日期之间的分区边界数量。 |
示例 |
datediff('month', DATE '1992-09-15', DATE '1992-11-14') |
Result |
2 |
别名 |
date_diff . |
描述 |
获取子字段(等同于extract )。 |
示例 |
datepart('year', DATE '1992-09-20') |
结果 |
1992 |
别名 |
date_part . |
Description |
The number of complete partitions between the dates. |
示例 |
datesub('month', DATE '1992-09-15', DATE '1992-11-14') |
Result |
1 |
别名 |
date_sub . |
Description |
Truncate to specified precision. |
示例 |
datetrunc('month', DATE '1992-03-07') |
Result |
1992-03-01 |
别名 |
date_trunc . |
Description |
The (English) name of the weekday. |
示例 |
dayname(DATE '1992-09-20') |
Result |
Sunday |
描述 |
从日期中获取子字段。 |
示例 |
extract('year' FROM DATE '1992-09-20') |
Result |
1992 |
描述 |
两个日期中较晚的一个。 |
示例 |
greatest(DATE '1992-09-20', DATE '1992-03-07') |
结果 |
1992-09-20 |
描述 |
如果日期是有限的,则返回 true ,否则返回 false。 |
示例 |
isfinite(DATE '1992-03-07') |
Result |
true |
描述 |
如果日期是无限的,则返回 true ,否则返回 false。 |
示例 |
isinf(DATE '-infinity') |
Result |
true |
描述 |
日期中对应月份的最后一天。 |
示例 |
last_day(DATE '1992-09-20') |
结果 |
1992-09-30 |
描述 |
两个日期中较早的一个。 |
示例 |
least(DATE '1992-09-20', DATE '1992-03-07') |
结果 |
1992-03-07 |
描述 |
给定部分的日期。 |
示例 |
make_date(1992, 9, 20) |
Result |
1992-09-20 |
Description |
The (English) name of the month. |
示例 |
monthname(DATE '1992-09-20') |
Result |
September |
描述 |
根据格式字符串将日期转换为字符串。 |
示例 |
strftime(date '1992-01-01', '%a, %-d %B %Y') |
结果 |
Wed, 1 January 1992 |
描述 |
通过指定的间隔 bucket_width 截断 date 。桶通过 offset 间隔偏移。 |
示例 |
time_bucket(INTERVAL '2 months', DATE '1992-04-20', INTERVAL '1 month') |
结果 |
1992-04-01 |
描述 |
通过指定的间隔 bucket_width 截断 date 。桶相对于 origin 日期对齐。对于不包含月份或年份间隔的桶,origin 默认为 2000-01-03 ,对于包含月份和年份的桶,默认为 2000-01-01 。 |
示例 |
time_bucket(INTERVAL '2 weeks', DATE '1992-04-20', DATE '1992-04-01') |
结果 |
1992-04-15 |
描述 |
当前日期(当前事务的开始时间)以UTC表示。 |
示例 |
today() |
Result |
2022-10-08 |
还有一些专门的提取函数来获取子字段。
一些例子包括从日期中提取天数,或从日期中提取星期几。
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
.