DATE_TRUNC()

DATE_TRUNC() 将时间值截断到指定日历或时钟单位的起点。

描述

DATE_TRUNC(unit, date) 返回将输入值向下舍入到指定 unit 起点的结果。单位名称不区分大小写。week 截断到周一零点。

支持的单位取决于输入类型:

输入类型

支持的单位

DATE

yearquartermonthweekday

DATETIMETIMESTAMP

yearquartermonthweekdayhourminutesecond

如果任一参数为 NULL,结果为 NULL。不支持的单位或输入类型会报错。

语法

DATE_TRUNC(unit, date)

参数

参数

说明

unit

指定时间单位的字符串,大小写不敏感,必须是输入类型支持的单位。

date

要截断的 DATEDATETIMETIMESTAMP 值。

返回值

返回与输入所属时间类型一致的截断值。

示例

DROP DATABASE IF EXISTS date_trunc_demo;
CREATE DATABASE date_trunc_demo;
USE date_trunc_demo;

SELECT DATE_TRUNC('year', CAST('2024-05-16 12:34:56' AS DATETIME)) AS datetime_year;
SELECT DATE_TRUNC('hour', CAST('2024-05-16 12:34:56' AS DATETIME)) AS datetime_hour;
SELECT DATE_TRUNC('second', CAST('2024-05-16 12:34:56' AS TIMESTAMP)) AS timestamp_second;
SELECT DATE_TRUNC('week', CAST('2024-05-19' AS DATE)) AS date_week;
SELECT DATE_TRUNC('day', CAST('2024-05-16' AS DATE)) AS date_day;

CREATE TABLE readings (d DATETIME, value INT);
INSERT INTO readings VALUES ('2024-05-16 12:01:00', 1), ('2024-05-16 12:45:00', 2), ('2024-05-16 13:01:00', 3);
SELECT DATE_TRUNC('hour', d) AS bucket, SUM(value) AS total FROM readings GROUP BY bucket ORDER BY bucket;

DROP DATABASE date_trunc_demo;

以下单位不能用于 DATE 值:

-- Expected-Success: false
SELECT DATE_TRUNC('hour', CAST('2024-05-16' AS DATE));