TRUNC_TIME

将日期或时间类型数据按照datepart指定的时间单位进行截取后,返回STRING类型数据。

命令格式

string TRUNC_TIME(date|datetime|timestamp|timestamp_ntz <date>, string <datepart>)

参数说明

  • date:必填。支持DATE、DATETIME、TIMESTAMPTIMESTAMP_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、TIMESTAMPTIMESTAMP_NTZ类型时,返回报错。仅在MaxCompute项目的数据类型为1.0版本时,date支持STRING类型,具体可参见示例3:时间为STRING类型

  • datepartNULL时,返回报错。

使用示例

示例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函数属于日期函数,更多日期计算、日期转换的相关函数请参见日期与时间函数