九月 18, 2023
摘要:本教程向您展示如何使用 PostgreSQL 的date_trunc()
函数,将时间戳或间隔值截断到指定的精度级别。
目录
PostgreSQL date_trunc 函数简介
date_trunc
函数根据指定的日期部分(例如小时、周或月)截断一个 TIMESTAMP 或一个 INTERVAL 值,并以一定精度返回截断的时间戳或间隔值。
下面说明了date_trunc
函数的语法:
date_trunc('datepart', field)
datepart
参数是用于截断field
的精度级别,可以是以下之一:
- millennium
- century
- decade
- year
- quarter
- month
- week
- day
- hour
- minute
- second
- milliseconds
- microseconds
field
参数是一个要截断的TIMESTAMP
或INTERVAL
值。它可以是计算结果为时间戳或间隔值的表达式。
date_trunc
函数返回一个TIMESTAMP
或INTERVAL
值。
PostgreSQL date_trunc 示例
以下示例将TIMESTAMP
值截断到hour
日期部分:
SELECT DATE_TRUNC('hour', TIMESTAMP '2017-03-17 02:09:30');
以下是输出:
date_trunc
---------------------
2017-03-17 02:00:00
(1 row)
date_trunc
函数返回具有小时精度的结果。
如果要将TIMESTAMP
值截断到分钟,可以将'minute'
字符串作为第一个参数传递:
SELECT date_trunc('minute', TIMESTAMP '2017-03-17 02:09:30');
该函数返回一个精度级别为分钟的TIMESTAMP
值:
date_trunc
---------------------
2017-03-17 02:09:00
(1 row)
请查看示例数据库中的rental
表,如下:
您可以使用date_trunc
函数按月统计租赁次数,如下:
SELECT
date_trunc('month', rental_date) m,
COUNT (rental_id)
FROM
rental
GROUP BY
m
ORDER BY
m;
在此查询中,date_trunc
函数将租赁日期截断到月份部分。COUNT 函数计算租赁数量,并使用 GROUP BY 子句按月对租赁进行分组。
month | count
---------------------+-------
2005-05-01 00:00:00 | 1156
2005-06-01 00:00:00 | 2311
2005-07-01 00:00:00 | 6709
2005-08-01 00:00:00 | 5686
2006-02-01 00:00:00 | 182
(5 rows)
同样,您可以按如下方式计算员工每年的租赁次数:
SELECT
staff_id,
date_trunc('year', rental_date) y,
COUNT (rental_id) rental
FROM
rental
GROUP BY
staff_id, y
ORDER BY
staff_id
下面显示了输出:
staff_id | y | rental
----------+---------------------+--------
1 | 2006-01-01 00:00:00 | 85
1 | 2005-01-01 00:00:00 | 7955
2 | 2005-01-01 00:00:00 | 7907
2 | 2006-01-01 00:00:00 | 97
(4 rows)
在本教程中,您学习了如何使用 PostgreSQL 的date_trunc
函数截断时间戳或间隔值。
了解更多
PostgreSQL 教程:日期函数
PostgreSQL 文档:时间/日期函数和操作符