⌘+k ctrl+k
1.1.3 (stable)
Search Shortcut cmd + k | ctrl + k
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-271992-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-221992-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表示。

current_date

描述 当前日期(在当前事务开始时)以UTC表示。
示例 current_date
结果 2022-10-08

date_add(date, interval)

描述 将时间间隔添加到日期中。
示例 date_add(DATE '1992-09-15', INTERVAL 2 MONTH)
结果 1992-11-15

date_diff(part, startdate, enddate)

描述 日期之间的分区边界数量。
示例 date_diff('month', DATE '1992-09-15', DATE '1992-11-14')
Result 2

date_part(part, date)

描述 获取子字段(等同于extract)。
示例 date_part('year', DATE '1992-09-20')
结果 1992

date_sub(part, startdate, enddate)

描述 两个日期之间完整的分区数量。
示例 date_sub('month', DATE '1992-09-15', DATE '1992-11-14')
Result 1

date_trunc(part, date)

Description Truncate to specified precision.
示例 date_trunc('month', DATE '1992-03-07')
结果 1992-03-01

datediff(part, startdate, enddate)

描述 日期之间的分区边界数量。
示例 datediff('month', DATE '1992-09-15', DATE '1992-11-14')
Result 2
别名 date_diff.

datepart(part, date)

描述 获取子字段(等同于extract)。
示例 datepart('year', DATE '1992-09-20')
结果 1992
别名 date_part.

datesub(part, startdate, enddate)

Description The number of complete partitions between the dates.
示例 datesub('month', DATE '1992-09-15', DATE '1992-11-14')
Result 1
别名 date_sub.

datetrunc(part, date)

Description Truncate to specified precision.
示例 datetrunc('month', DATE '1992-03-07')
Result 1992-03-01
别名 date_trunc.

dayname(date)

Description The (English) name of the weekday.
示例 dayname(DATE '1992-09-20')
Result Sunday

extract(part from date)

描述 从日期中获取子字段
示例 extract('year' FROM DATE '1992-09-20')
Result 1992

greatest(date, date)

描述 两个日期中较晚的一个。
示例 greatest(DATE '1992-09-20', DATE '1992-03-07')
结果 1992-09-20

isfinite(date)

描述 如果日期是有限的,则返回 true,否则返回 false。
示例 isfinite(DATE '1992-03-07')
Result true

isinf(date)

描述 如果日期是无限的,则返回 true,否则返回 false。
示例 isinf(DATE '-infinity')
Result true

last_day(date)

描述 日期中对应月份的最后一天。
示例 last_day(DATE '1992-09-20')
结果 1992-09-30

least(date, date)

描述 两个日期中较早的一个。
示例 least(DATE '1992-09-20', DATE '1992-03-07')
结果 1992-03-07

make_date(year, month, day)

描述 给定部分的日期。
示例 make_date(1992, 9, 20)
Result 1992-09-20

monthname(date)

Description The (English) name of the month.
示例 monthname(DATE '1992-09-20')
Result September

strftime(date, format)

描述 根据格式字符串将日期转换为字符串。
示例 strftime(date '1992-01-01', '%a, %-d %B %Y')
结果 Wed, 1 January 1992

time_bucket(bucket_width, date[, offset])

描述 通过指定的间隔 bucket_width 截断 date。桶通过 offset 间隔偏移。
示例 time_bucket(INTERVAL '2 months', DATE '1992-04-20', INTERVAL '1 month')
结果 1992-04-01

time_bucket(bucket_width, date[, origin])

描述 通过指定的间隔 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

today()

描述 当前日期(当前事务的开始时间)以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.