TIME_DIFF

TIME_DIFF函数用于计算时间end_timestart_time的差值,并将该差值以指定的时间单位date_part表示。

命令格式

BIGINT TIME_DIFF(BIGINT <end_time>, BIGINT <start_time>, STRING <date_part>)

-- 标准示例。
-- 返回1106600。
SELECT TIME_DIFF(1230000, 123400, 'ff6');

参数说明

  • end_timestart_time必填。以微秒为单位用BIGINT类型表示的时间值。BIGINT类型。可以用TO_TIME函数进行构造。

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

  • date_part必填。指定返回值的时间单位。STRING类型常量。该字段支持的取值如下:

    • 小时:HOURhh

    • 分钟:MINUTEmi

    • 秒:SECONDss

    • 毫秒:MILLISff3

    • 微秒:MICROSff6

返回值说明

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

  • end_timestart_timeBIGINT类型时,返回报错。

  • 如果end_time小于start_time,返回结果为负数。

  • end_timestart_timedate_part中有任意一个值为NULL时,返回NULL。

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

使用示例

  • 示例1:对两个时间值进行以微秒‘ff6’为单位的差值计算。

    -- 返回1106600。
    SELECT TIME_DIFF(1230000, 123400, 'ff6');
  • 示例2:对两个使用TO_TIME函数构造的时间值,进行以毫秒‘ff3’为单位的差值计算。

    -- 返回-20000。
    SELECT TIME_DIFF(TO_TIME(15,39,10), TO_TIME(15,39,30), 'ff3');
  • 示例3:对两个时间值进行以秒‘second’为单位的差值计算。

    -- 开启MaxCompute 2.0数据类型版本。
    SET odps.sql.type.system.odps2 = true;
    
    -- 返回10。
    SELECT TIME_DIFF(
    TO_TIME(TIMESTAMP '2025-03-27 15:39:40'),
    TO_TIME(TIMESTAMP '2025-03-27 15:39:30'),
    'second'
    );
  • 示例4:对两个使用TO_TIME函数构造的时间值,进行以毫秒‘hour’为单位的差值计算。

    -- 开启MaxCompute 2.0数据类型版本。
    SET odps.sql.type.system.odps2 = true;
    
    -- 实际差值约2小时34分钟,向下取整为2小时。
    -- 返回2。
    SELECT TIME_DIFF(TO_TIME(12,14,10), TO_TIME(09,39,30), 'hour');
  • 示例5:NULL输入处理。

    -- 任意参数为NULL时返回NULL。
    -- 返回NULL。
    SELECT TIME_DIFF(NULL, TO_TIME(12,0,0), 'minute');
    -- 返回NULL。
    SELECT TIME_DIFF(TO_TIME(12,0,0), NULL, 'minute');
    -- 返回NULL。
    SELECT TIME_DIFF(TO_TIME(12,0,0), TO_TIME(12,10,0), NULL);

相关函数

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