将日期或时间类型数据按照datepart指定的时间单位进行截取后,返回STRING类型数据。
命令格式
string TRUNC_TIME(date|datetime|timestamp|timestamp_ntz <date>, string <datepart>)
参数说明
date:必填。支持DATE、DATETIME、TIMESTAMP或TIMESTAMP_NTZ类型。如果输入为STRING类型,且MaxCompute项目的数据类型版本是1.0,则会隐式转换为DATETIME类型后参与运算。
datepart:必填。STRING类型常量,忽略大小写,支持
year
(年)、month
(月)、day
(日)和hour
(小时)。
返回值说明
返回STRING类型。
对于时区相关的数据类型,如DATETIME/TIMESTAMP,TRUNC_TIME函数会先将本地时间转换为UTC时间,然后再按照datepart进行截取计算,将结果转换为STRING类型返回。具体可参见示例1:时间为DATETIME类型。
返回STRING格式
datepart取值为'year':返回STRING格式为
yyyy
。datepart取值为'month':返回STRING格式为
yyyy-mm
。datepart取值为'day':返回STRING格式为
yyyy-mm-dd
。datepart取值为'hour':返回STRING格式为
yyyy-mm-dd hh:mm:ss
。
返回规则
date为非DATE、DATETIME、TIMESTAMP或TIMESTAMP_NTZ类型时,返回报错。仅在MaxCompute项目的数据类型为1.0版本时,date支持STRING类型,具体可参见示例3:时间为STRING类型。
datepart为NULL时,返回报错。
使用示例
示例1:时间为DATETIME类型
例如,当前Session或者Project时区为东八区,本地时间是datetime '2025-06-03 07:15:08',TRUNC_TIME函数会先将本地时间转换为UTC时间'2025-06-02 23:15:08',然后按照datepart截取计算,将结果转换为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类型数据按照datepart指定的时间单位截取后,返回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类型后参与运算,否则会报错。
SET odps.sql.type.system.odps2=false;
SELECT TRUNC_TIME('2025-06-03 15:30:30','hour');
返回结果如下。
+------------+
| _c0 |
+------------+
| 2025-06-03 07:00:00 |
+------------+
相关函数
TRUNC_TIME函数属于日期函数,更多日期计算、日期转换的相关函数请参见日期与时间函数。