日期部分函数
date_part、date_trunc 和 date_diff 函数可用于提取或操作时间类型(例如 TIMESTAMP、TIMESTAMPTZ、DATE 和 INTERVAL)中的组成部分。
要提取或操作的部分由下表中的字符串指定。
“示例”列展示了时间戳 2021-08-03 11:59:44.123456 对应的值。
只有第一张表中的条目可以从 INTERVAL 中提取,或用于构造 INTERVAL。
除了返回
DOUBLE的julian和epoch外,其他部分都按整数提取。由于 Goose 中不存在无穷整数值,对于无穷时间戳会返回NULL。
可用于日期部分和区间的部分说明符
| 说明符 | 描述 | 同义词 | 示例 |
|---|---|---|---|
century | 公历世纪 | cent, centuries, c | 21 |
day | 公历日 | days, d, dayofmonth | 3 |
decade | 公历十年 | dec, decades, decs | 202 |
hour | 小时 | hr, hours, hrs, h | 11 |
microseconds | 分钟内微秒数 | microsecond, us, usec, usecs, usecond, useconds | 44123456 |
millennium | 公历千年 | mil, millenniums, millenia, mils, millenium | 3 |
milliseconds | 分钟内毫秒数 | millisecond, ms, msec, msecs, msecond, mseconds | 44123 |
minute | 分钟 | min, minutes, mins, m | 59 |
month | 公历月 | mon, months, mons | 8 |
quarter | 一年中的季度(1-4) | quarters | 3 |
second | 秒 | sec, seconds, secs, s | 44 |
year | 公历年 | yr, y, years, yrs | 2021 |
仅可作为日期部分说明符使用
| 说明符 | 描述 | 同义词 | 示例 |
|---|---|---|---|
dayofweek | 星期几(星期日 = 0,星期六 = 6) | weekday, dow | 2 |
dayofyear | 一年中的第几天(1-365/366) | doy | 215 |
epoch | 自 1970-01-01 以来的秒数 | 1760465850.6698709 | |
era | 公历纪元(CE/AD、BCE/BC) | 1 | |
isodow | ISO 星期几(星期一 = 1,星期日 = 7) | 2 | |
isoyear | ISO 年(从包含 1 月 4 日的那一周的星期一开始) | 2021 | |
julian | 儒略日编号。 | 2459430.4998162435 | |
timezone_hour | 时区偏移的小时部分 | 0 | |
timezone_minute | 时区偏移的分钟部分 | 0 | |
timezone | 时区偏移(秒) | 0 | |
week | 周序号 | weeks, w | 31 |
yearweek | YYYYWW 格式的 ISO 年和周序号 | 202131 |
注意:除非安装了诸如 ICU 的时区扩展以支持 TIMESTAMP WITH TIME ZONE,否则所有时区相关部分都为零。
部分函数
以下是用于提取特定子字段的专用函数:
| 名称 | 描述 |
|---|---|
century(date) | 世纪。 |
day(date) | 日。 |
dayofmonth(date) | 日(同义词)。 |
dayofweek(date) | 数值星期(星期日 = 0,星期六 = 6)。 |
dayofyear(date) | 一年中的第几天(从 1 开始,即 1 月 1 日 = 1)。 |
decade(date) | 十年(year / 10)。 |
epoch(date) | 自 1970-01-01 以来的秒数。 |
era(date) | 历法纪元。 |
hour(date) | 小时。 |
isodow(date) | ISO 数值星期(星期一 = 1,星期日 = 7)。 |
isoyear(date) | ISO 年(从包含 1 月 4 日的那一周的星期一开始)。 |
julian(date) | DOUBLE 类型的儒略日编号。 |
microsecond(date) | 分钟内微秒数。 |
millennium(date) | 千年。 |
millisecond(date) | 分钟内毫秒数。 |
minute(date) | 分钟。 |
month(date) | 月。 |
quarter(date) | 季度。 |
second(date) | 秒。 |
timezone_hour(date) | 时区偏移小时部分。 |
timezone_minute(date) | 时区偏移分钟部分。 |
timezone(date) | 时区偏移(分钟)。 |
week(date) | ISO 周。 |
weekday(date) | 数值星期同义词(星期日 = 0,星期六 = 6)。 |
weekofyear(date) | ISO 周(同义词)。 |
year(date) | 年。 |
yearweek(date) | 由 ISO 年和两位 ISO 周序号组合而成的 BIGINT。 |
century(date)
| Description | 世纪。 |
| Example | century(DATE '1992-02-15') |
| Result | 20 |
day(date)
| Description | 日。 |
| Example | day(DATE '1992-02-15') |
| Result | 15 |
dayofmonth(date)
| Description | 日(同义词)。 |
| Example | dayofmonth(DATE '1992-02-15') |
| Result | 15 |
dayofweek(date)
| Description | 数值星期(星期日 = 0,星期六 = 6)。 |
| Example | dayofweek(DATE '1992-02-15') |
| Result | 6 |
dayofyear(date)
| Description | 一年中的第几天(从 1 开始,即 1 月 1 日 = 1)。 |
| Example | dayofyear(DATE '1992-02-15') |
| Result | 46 |
decade(date)
| Description | 十年(year / 10)。 |
| Example | decade(DATE '1992-02-15') |
| Result | 199 |
epoch(date)
| Description | 自 1970-01-01 以来的秒数。 |
| Example | epoch(DATE '1992-02-15') |
| Result | 698112000 |
era(date)
| Description | 历法纪元。 |
| Example | era(DATE '0044-03-15 (BC)') |
| Result | 0 |
hour(date)
| Description | 小时。 |
| Example | hour(timestamp '2021-08-03 11:59:44.123456') |
| Result | 11 |
isodow(date)
| Description | ISO 数值星期(星期一 = 1,星期日 = 7)。 |
| Example | isodow(DATE '1992-02-15') |
| Result | 6 |
isoyear(date)
| Description | ISO 年(从包含 1 月 4 日的那一周的星期一开始)。 |
| Example | isoyear(DATE '2022-01-01') |
| Result | 2021 |
julian(date)
| Description | DOUBLE 类型的儒略日编号。 |
| Example | julian(DATE '1992-09-20') |
| Result | 2448886.0 |
microsecond(date)
| Description | 分钟内微秒数。 |
| Example | microsecond(timestamp '2021-08-03 11:59:44.123456') |
| Result | 44123456 |
millennium(date)
| Description | 千年。 |
| Example | millennium(DATE '1992-02-15') |
| Result | 2 |
millisecond(date)
| Description | 分钟内毫秒数。 |
| Example | millisecond(timestamp '2021-08-03 11:59:44.123456') |
| Result | 44123 |
minute(date)
| Description | 分钟。 |
| Example | minute(timestamp '2021-08-03 11:59:44.123456') |
| Result | 59 |
month(date)
| Description | 月。 |
| Example | month(DATE '1992-02-15') |
| Result | 2 |
quarter(date)
| Description | 季度。 |
| Example | quarter(DATE '1992-02-15') |
| Result | 1 |
second(date)
| Description | 秒。 |
| Example | second(timestamp '2021-08-03 11:59:44.123456') |
| Result | 44 |
timezone_hour(date)
| Description | 时区偏移小时部分。 |
| Example | timezone_hour(DATE '1992-02-15') |
| Result | 0 |
timezone_minute(date)
| Description | 时区偏移分钟部分。 |
| Example | timezone_minute(DATE '1992-02-15') |
| Result | 0 |
timezone(date)
| Description | 时区偏移(分钟)。 |
| Example | timezone(DATE '1992-02-15') |
| Result | 0 |
week(date)
| Description | ISO 周。 |
| Example | week(DATE '1992-02-15') |
| Result | 7 |
weekday(date)
| Description | 数值星期同义词(星期日 = 0,星期六 = 6)。 |
| Example | weekday(DATE '1992-02-15') |
| Result | 6 |
weekofyear(date)
| Description | ISO 周(同义词)。 |
| Example | weekofyear(DATE '1992-02-15') |
| Result | 7 |
year(date)
| Description | 年。 |
| Example | year(DATE '1992-02-15') |
| Result | 1992 |
yearweek(date)
| Description | 由 ISO 年和两位 ISO 周序号组合而成的 BIGINT。 |
| Example | yearweek(DATE '1992-02-15') |
| Result | 199207 |