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 |
- |
减去 DATEs |
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.