TIME_SUB

TIME_SUB函数用于按照指定的时间单位date_part,在指定的时间值time上减少指定的幅度delta

命令格式

BIGINT TIME_SUB(BIGINT <time>, BIGINT <delta>, STRING <date_part>)

-- 标准示例。
-- 返回1233995。
SELECT TIME_SUB(1234000, 5, 'MICROS');

参数说明

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

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

  • delta:必填。修改幅度。BIGINT类型。如果delta大于0,则进行减运算,否则进行增运算。

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

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

    • 小时:HOURhh

    • 分钟:MINUTEmi

    • 秒:SECONDss

    • 毫秒:MILLISff3

    • 微秒:MICROSff6

返回值说明

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

  • timeBIGINT类型时,返回报错。

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

  • timedeltadate_part值为NULL时,返回NULL。

使用示例

  • 示例1:对时间值进行以微秒'ff6'为单位的减法运算。

    -- 返回1233995。
    SELECT TIME_SUB(1234000, 5, 'ff6');
  • 示例2:对时间值进行以小时'hour'为单位的减法运算。

    -- 返回38380000000。
    SELECT TIME_SUB(TO_TIME('15:39:40','%H:%M:%S'), 5, 'hour');
  • 示例3:对时间值进行以毫秒'millis'为单位的减法运算。

    -- 开启MaxCompute 2.0数据类型版本。
    SET odps.sql.type.system.odps2 = true;
    
    -- 返回56379995000。
    SELECT TIME_SUB(TO_TIME(TIMESTAMP '2025-03-27 15:39:40'), 5, 'millis');
  • 示例4:使用FORMAT_TIME函数将返回的BIGINT类型的时间值,转换为指定format时间格式的STRING类型时间。

    -- 返回15:39:45。
    SELECT FORMAT_TIME(TIME_SUB(TO_TIME(15,39,40), -5, 'second'),'%H:%M:%S');
    
    -- 设置数据类型版本为2.0。
    SET odps.sql.type.system.odps2 = true;
    --返回 15:44:40.123。
    SELECT FORMAT_TIME(TIME_SUB(TO_TIME(TIMESTAMP_NTZ '2025-03-27 15:39:40.123456'),-5,'minute'),'%H:%M:%S.ff3');
  • 示例5:NULL输入处理。

    -- 任意参数为NULL时返回NULL。
    -- 返回NULL。
    SELECT TIME_SUB(NULL, 10, 'SECOND');
    
    -- 返回NULL。
    SELECT TIME_SUB(1234000, NULL, 'ff6');
    
    -- 返回NULL。
    SELECT TIME_SUB(1234000, 5, NULL);

相关函数

如果需要将TIME_SUB函数返回的BIGINT类型时间值,转换为指定时间格式的STRING类型时间,可参考FORMAT_TIME函数。

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