TRUNC_TIME

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、TIMESTAMPTIMESTAMP_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、TIMESTAMPTIMESTAMP_NTZ类型时,返回报错。

  • date_partNULL时,返回报错。

使用示例

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