TRUNC_TIME函数用于将指定的日期或时间类型数据按date_part所指定的时间单位进行截断,返回STRING类型数据。
命令格式
STRING TRUNC_TIME(DATE|DATETIME|TIMESTAMP|TIMESTAMP_NTZ <date>, STRING <date_part>)
-- 标准示例。
-- 返回2025-06。
SELECT TRUNC_TIME(DATETIME '2025-06-10 14:20:30', 'month');参数说明
date:必填。日期或时间戳。支持DATE、DATETIME、TIMESTAMP或TIMESTAMP_NTZ类型。
在MaxCompute1.0数据类型版本下,输入参数可以为STRING类型,时间格式需符合
DATETIME类型,即yyyy-mm-dd hh:mi:ss,例如2025-07-21 00:00:00,会隐式转换为DATETIME类型后参与运算。date_part:必填。指定截断的时间单位。STRING类型常量,忽略大小写,支持
year(年)、month(月)、day(日)和hour(小时)。
返回值说明
返回STRING类型。具体格式取决于date_part的取值:
对于时区相关的数据类型,如DATETIME/TIMESTAMP,TRUNC_TIME函数会先将本地时间转换为UTC时间,然后再按照date_part进行截取计算,将结果转换为STRING类型返回。
date_part取值为'year':返回STRING格式为
yyyy。date_part取值为'month':返回STRING格式为
yyyy-mm。date_part取值为'day':返回STRING格式为
yyyy-mm-dd。date_part取值为'hour':返回STRING格式为
yyyy-mm-dd hh:mm:ss。
返回规则如下:
date为非DATE、DATETIME、TIMESTAMP或TIMESTAMP_NTZ类型时,返回报错。
date_part为NULL时,返回报错。
使用示例
示例1:时间为DATETIME类型。
例如当前Session或者Project时区为东八区,本地时间是DATETIME '2025-06-03 07:15:08',TRUNC_TIME函数会先将本地时间转换为UTC时间'2025-06-02 23:15:08',然后按照date_part截取计算,将结果转换为STRING类型返回。
SET odps.sql.timezone=Asia/Shanghai; SELECT TRUNC_TIME(DATETIME '2025-06-03 07:15:08','year') AS tc_year, TRUNC_TIME(DATETIME '2025-06-03 07:15:08','month') AS tc_month, TRUNC_TIME(DATETIME '2025-06-03 07:15:08','day') AS tc_date, TRUNC_TIME(DATETIME '2025-06-03 07:15:08','hour') AS tc_hour; -- 返回结果。 +------------+------------+------------+------------+ | tc_year | tc_month | tc_date | tc_hour | +------------+------------+------------+------------+ | 2025 | 2025-06 | 2025-06-02 | 2025-06-02 23:00:00 | +------------+------------+------------+------------+示例2:时间为DATE类型。
例如输入时间是DATE '2025-06-10',TRUNC_TIME函数会将DATE类型数据按照date_part指定的时间单位截取后,返回STRING类型。
SELECT TRUNC_TIME(DATE '2025-06-10','year' ), TRUNC_TIME(DATE '2025-06-10','month' ), TRUNC_TIME(DATE '2025-06-10','day' ); -- 返回结果。 +------------+------------+------------+ | _c0 | _c1 | _c2 | +------------+------------+------------+ | 2025 | 2025-06 | 2025-06-10 | +------------+------------+------------+示例3:时间为STRING类型。
例如输入时间为STRING类型'2025-06-03 15:30:30',需要设置MaxCompute项目的数据类型版本为1.0,才会隐式转换为DATETIME类型后参与运算,否则会报错。
-- 当前Session或者Project时区为东八区。 SET odps.sql.timezone=Asia/Shanghai; -- 设置数据类型版本为1.0。 SET odps.sql.type.system.odps2=false; -- 时间先转换为UTC时间,然后再按照小时'hour'进行截取计算。 SELECT TRUNC_TIME('2025-06-03 15:30:30','hour'); -- 返回结果。 +------------+ | _c0 | +------------+ | 2025-06-03 07:00:00 | +------------+
相关函数
TRUNC_TIME函数属于日期函数,更多日期计算、日期转换的相关函数请参见日期与时间函数。