全部產品
Search
文件中心

MaxCompute:TIME_DIFF

更新時間:Nov 12, 2025

TIME_DIFF函數用於計算時間end_time與start_time的差值,並將該差值以指定的時間單位date_part表示。

命令格式

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

-- 標準樣本。
-- 返回1106600。
SELECT TIME_DIFF(1230000, 123400, 'ff6');

參數說明

  • end_time、start_time:必填。以微秒為單位用BIGINT類型表示的時間值。BIGINT類型。可以用TO_TIME函數進行構造。

    在MaxCompute1.0資料類型版本下,如果參數為STRING或DOUBLE類型,會被隱式轉換為BIGINT類型後參與運算。

  • date_part:必填。指定傳回值的時間單位。STRING類型常量。該欄位支援的取值如下:

    • 小時:HOUR或hh。

    • 分鐘:MINUTE或mi。

    • 秒:SECOND或ss。

    • 毫秒:MILLIS或ff3。

    • 微秒:MICROS或ff6。

傳回值說明

返回BIGINT類型,以微秒為單位用BIGINT類型表示的時間值。返回規則如下:

  • end_time或start_time非BIGINT類型時,返回報錯。

  • 如果end_time小於start_time,返回結果為負數。

  • end_time、start_time和date_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函數屬於時間函數,更多時間計算、時間轉換的相關函數請參見日期與時間函數。