时间和日期截取函数
date_part(text, timestamp | interval)
date_part函数用于从一个日期时间表达式(timestamp或interval)中提取指定的部分(text),等效于extract(field from timestamp)函数。
语法:
date_part('field', source)
- source,必须是一个timestamp、time或interval类型的值表达式(类型为date的表达式转换为timestamp,因此也可以用)。
- field,是一个标识符或者字符串,它指定从源数据中抽取的时间部分。field的取值见表1。
返回值类型:double precision
示例:
获取指定日期的小时数。
1 2 3 4 5 |
SELECT date_part('hour', timestamp '2001-02-16 20:38:40'); date_part ----------- 20 (1 row) |
从时间间隔2 years 3 months中提取月份部分。
1 2 3 4 5 |
SELECT date_part('month', interval '2 years 3 months'); date_part ----------- 3 (1 row) |
date_trunc(text, timestamp with time zone | timestamp without time zone | interval)
描述:将时间日期数据截断到指定的(text)精度。
text支持microseconds、milliseconds、second、minute、hour、day、week、month、quarter、year、decade、century、millennium。
返回值类型:timestamp with time zone、timestamp without time zone、interval
示例:
将输入的时间截断到小时。
1 2 3 4 5 |
SELECT date_trunc('hour', timestamp '2025-02-16 20:38:40'); date_trunc --------------------- 2025-02-16 20:00:00 (1 row) |
将输入的时间截断到天。
1 2 3 4 5 |
SELECT date_trunc('day', timestamptz'2025-02-16 20:38:40+08'); date_trunc ------------------------ 2025-02-16 00:00:00-05 (1 row) |
将输入的时间截断到月。
1 2 3 4 5 |
SELECT date_trunc('month', timestamp '2025-02-16 20:38:40'); date_trunc --------------------- 2025-02-01 00:00:00 (1 row) |
将输入时间戳截断至一个季度的第一天。
1 2 3 4 5 |
SELECT DATE_TRUNC('quarter', TIMESTAMP '20250430 04:05:06.789'); date_trunc --------------------- 2025-04-01 00:00:00 (1 row) |
截取当前月的1号12点。
1 2 3 4 5 |
SELECT date_trunc('month',now()) +interval '12h'; ?column? ------------------------ 2025-09-01 12:00:00-04 (1 row) |
截取当日的9点。
1 2 3 4 5 |
SELECT date_trunc('day',now()) + interval '9h'; ?column? ------------------------ 2025-09-22 09:00:00-04 (1 row) |
截取今年的第一天。
1 2 3 4 5 |
SELECT date_trunc('year',CURRENT_DATE); date_trunc ------------------------ 2025-01-01 00:00:00-05 (1 row) |
trunc(timestamp)
描述:默认按天截取。
返回值类型:timestamp
示例:
1 2 3 4 |
SELECT trunc(timestamp '2001-02-16 20:38:40'); trunc --------------------- 2001-02-16 00:00:00 (1 row) |
extract(field from timestamp | time | interval)
extract函数用于从日期时间的表达式中提取指定的时间部分,例如提取年份、月份、小时等。
语法:
EXTRACT(field FROM source)
- source,必须是一个timestamp、time或interval类型的值表达式(类型为date的表达式转换为timestamp,因此也可以用)。
- field,是一个标识符或者字符串,它指定从源数据中抽取的时间部分。field的取值见表1。
extract函数返回值类型:double precision
|
field |
含义 |
用法示例 |
提取结果 |
||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
century |
世纪 |
从给定的时间戳中提取世纪部分数值:
第一个世纪从0001-01-01 00:00:00 AD开始。这个定义适用于所有使用阳历的国家。没有0世纪,直接从公元前1世纪到公元1世纪。 |
返回结果如下:
|
||||||||||
|
millennium |
千年 |
从指定的时间戳中提取千年部分的数值:
20世纪(19xx年)里面的年份在第二个千年里。第三个千年从2001年1月1日零时开始。 |
返回结果如下:
|
||||||||||
|
decade |
十年 |
从指定的时间戳中提取十年编号的数值:
|
返回结果如下:
|
||||||||||
|
year |
年 |
从指定的时间戳中提取年份部分。
|
返回结果如下:
|
||||||||||
|
quarter |
季度 |
从指定的时间戳中提取日期所在的季度(1~4个季度)。
|
返回结果如下:
|
||||||||||
|
month |
月份 |
|
|
||||||||||
|
week |
周 |
遵循ISO 8601标准:一年的第一个星期四在第一周;每周从星期一开始,到星期日结束;范围:1-53。 获取目标日期是在一年中的第几周。
|
返回结果如下:
|
||||||||||
|
day |
天 |
|
|
||||||||||
|
hour |
小时 |
从指定的时间戳中提取小时部分(0~23)。
|
返回结果如下:
|
||||||||||
|
minute |
分钟 |
从指定的时间戳中提取分钟部分。
|
返回结果如下:
|
||||||||||
|
second |
秒 |
从指定的时间戳中提取秒部分(包含小数部分)。
|
返回结果如下:
|
||||||||||
|
milliseconds |
毫秒 |
从指定的时间戳中提取毫秒部分。返回的是整个秒字段的毫秒表示,即秒部分(包括小数秒)乘以 1000。
|
返回结果如下:
|
||||||||||
|
microseconds |
微秒 |
从指定的时间戳中提取微秒部分。返回的是整个秒字段的微秒表示,即秒部分(包括小数秒)乘以 1,000,000。
|
返回结果如下:
|
||||||||||
|
epoch |
纪元以来的天数 |
将epoch值转换为时间戳的方法。
|
返回结果如下:
返回结果如下:
|
||||||||||
|
doy |
一年中的第几天 |
获取指定时间戳中的日期是一年中的第几天(1~365/366)。
|
返回结果如下:
|
||||||||||
|
isodow |
一周的第几天 |
获取指定时间戳中的日期是一周中的第几天(1~7,星期一为1,星期天为7)。
|
返回结果如下:
|
||||||||||
|
dow |
一周中的第几天,周日为0 |
获取指定时间戳中的日期是一周中的第几天(0~6,星期天为0,星期六为6)
|
返回结果如下:
|
||||||||||
|
isoyear |
ISO 8601标准年 |
获取指定日期在ISO 8601标准下的年份(不适用于interval) 每个带有星期一开始的周中包含1月4日的ISO年,所以在年初的1月或12月下旬的ISO年可能会不同于阳历的年。可参见week的描述。
|
返回结果如下:
返回结果如下:
|
||||||||||
|
timezone |
与UTC的时区偏移量 |
与UTC的时区偏移量,单位为秒。正数对应UTC东边的时区,负数对应UTC西边的时区。
|
返回结果如下:
|
||||||||||
|
timezone_hour |
时区偏移量的小时部分 |
从带时区的时间值中提取时区偏移量的小时部分。
|
返回结果如下:
|
||||||||||
|
timezone_minute |
时区偏移量的分钟部分 |
从带时区的时间值中提取时区偏移量的分钟部分。
|
返回结果如下:
|