すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:TIME_SUB

最終更新日:Nov 13, 2025

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 型である必要があります。TO_TIME 関数を使用してこの値を構築できます。

    MaxCompute V1.0 データ型エディションでは、このパラメーターが STRING 型または DOUBLE 型の場合、計算のために暗黙的に BIGINT 型に変換されます。

  • delta: 必須。減算する間隔。このパラメーターは BIGINT 型です。delta が 0 より大きい場合、間隔は減算されます。それ以外の場合、間隔は加算されます。

    MaxCompute V1.0 データ型エディションでは、このパラメーターが STRING 型または DOUBLE 型の場合、計算のために暗黙的に BIGINT 型に変換されます。

  • date_part: 必須。間隔の時間単位。このパラメーターは STRING 定数です。有効な値は次のとおりです。

    • 時間: HOUR または hh。

    • 分: MINUTE または mi。

    • 秒: SECOND または ss。

    • ミリ秒: MILLIS または ff3。

    • マイクロ秒: MICROS または ff6。

戻り値

BIGINT 値を返します。時間値はマイクロ秒で表されます。次のルールが適用されます。

  • time パラメーターが BIGINT 型でない場合、エラーが返されます。

  • date_part パラメーターが定数でない、サポートされていないフォーマットである、または別のデータの型である場合、エラーが返されます。

  • time、delta、または date_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 V2.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 時間値を指定されたフォーマットの 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);

関連関数

FORMAT_TIME 関数を使用して、TIME_SUB 関数によって返された BIGINT 時間値を指定されたフォーマットの STRING 値に変換できます。

TIME_SUB は時間関数です。時間計算および変換関数の詳細については、「日付と時刻の関数」をご参照ください。