TIME_TRUNC

TIME_TRUN函数用于将时间time按照date_part指定的时间单位进行截取,返回以微秒为单位用BIGINT类型表示的时间值。

命令格式

BIGINT TIME_TRUNC(BIGINT <time>, STRING <date_part>)

-- 标准示例。
-- 1234567890。
SELECT TIME_TRUNC(1234567890L,'ff6');

参数说明

  • time:必填。以微秒为单位用BIGINT类型表示的时间值。BIGINT类型。可以通过TO_TIME函数构造。

    MaxCompute 1.0数据类型版本下,如果参数为STRINGDOUBLE类型,则会被隐式转换为BIGINT类型后参与运算。

  • date_part:必填。指定截断的时间单位。STRING类型常量。该参数取值如下:

    • MICROSECOND/MICROS/ff6如果使用此粒度,时间值不会被截断,因为微秒是时间表示的最小单位。

    • MILLISECOND/MILLIS/ff3截断到最近的、小于或等于当前值的毫秒级别。例如:时间为15:30:00.123456,截断到毫秒后结果为15:30:00.123

    • SECOND/SS截断到最接近的、小于或等于当前值的秒级别。例如:时间为15:30:00.123456,截断到秒后结果为15:30:00

    • MINUTE/MI截断到最接近的、小于或等于当前值的分钟级别。例如:时间为15:30:45.123456,截断到分钟后结果为15:30:00

    • HOUR/HH截断到最接近的、小于或等于当前值的小时级别。例如:时间为15:45:30.123456,截断到小时后结果为15:00:00

返回值说明

返回BIGINT类型,以微秒为单位用BIGINT类型表示的时间值。返回规则如下:

  • timeBIGINT类型时,返回报错。

  • date_part为非常量、不支持的格式或其他类型时,返回报错。

  • timedate_part值为NULL时,返回NULL。

使用示例

基本示例

  • 示例1:以微秒'ff6'和毫秒'ff3'为粒度进行时间值截取。

    -- 按微秒 ff6 为粒度截取,返回1234567890。
    SELECT TIME_TRUNC(1234567890, 'ff6');
    
    -- 按毫秒 ff3 为粒度截取,返回 1234567000。
    SELECT TIME_TRUNC(1234567890, 'ff3');
  • 示例2:以小时'HOUR'、分钟'MINUTE' 和秒'SECOND'为粒度进行时间值截取,然后使用FORMAT_TIME函数将返回的BIGINT类型的时间值,转换为指定format时间格式的STRING类型时间。

    -- 将时间'15:31:38.776'分别按不同粒度截断,并格式化输出。
    -- 按小时HOUR为粒度截取,返回15:00:00。
    SELECT FORMAT_TIME(
    TIME_TRUNC(TO_TIME('15:31:38.776', 'HH:MI:SS.ff3'), 'HOUR'),
    '%H:%M:%S'
    ) AS truncated_hour
    
    -- 按分钟MINUTE为粒度截取,返回15:31:00。
    SELECT FORMAT_TIME(
    TIME_TRUNC(TO_TIME('15:31:38.776', 'HH:MI:SS.ff3'), 'MINUTE'),
    '%H:%M:%S'
    ) AS truncated_minute;
    
    -- 按秒SECOND为粒度截取,返回15:31:38。
    SELECT FORMAT_TIME(
    TIME_TRUNC(TO_TIME('15:31:38.776', 'HH:MI:SS.ff3'), 'SECOND'),
    '%H:%M:%S'
    ) AS truncated_second;
  • 示例3:NULL输入处理。

    -- 返回NULL。
    SELECT TIME_TRUNC(NULL, 'SECOND');
    
    -- date_partNULL,返回NULL。
    SELECT TIME_TRUNC(TO_TIME(12,00,00), NULL);

相关函数

TIME_TRUNC函数属于时间函数,更多时间计算、时间转换的相关函数请参见日期与时间函数