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 値です。この値を作成するには、TO_TIME 関数を使用します。
MaxCompute V1.0 データ型エディションでは、パラメーターが STRING 型または DOUBLE 型の場合、計算のために BIGINT 型に暗黙的に変換されます。
date_part: 必須。STRING 型の定数です。戻り値の時間単位を指定します。このパラメーターでは、次の値がサポートされています。
時間:
HOURまたはhh。分:
MINUTEまたはmi。秒:
SECONDまたはss。ミリ秒:
MILLISまたはff3。マイクロ秒:
MICROSまたはff6。
戻り値
BIGINT 値を返します。次のルールが適用されます。
end_time または start_time が BIGINT 型でない場合、エラーが返されます。
end_time が start_time より小さい場合、負の値が返されます。
end_time、start_time、または date_part が null の場合、NULL が返されます。
date_part が定数でない、サポートされていないフォーマットである、または別のデータ型である場合、エラーが返されます。
例
例 1: 2 つの時間値の差をマイクロ秒 ('ff6') 単位で計算します。
-- 1106600 を返します。 SELECT TIME_DIFF(1230000, 123400, 'ff6');例 2: TO_TIME 関数で作成された 2 つの時間値の差をミリ秒 ('ff3') 単位で計算します。
-- -20000 を返します。 SELECT TIME_DIFF(TO_TIME(15,39,10), TO_TIME(15,39,30), 'ff3');例 3: 2 つの時間値の差を秒 ('second') 単位で計算します。
-- MaxCompute V2.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 関数で作成された 2 つの時間値の差を時間 ('hour') 単位で計算します。
-- MaxCompute V2.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 は日付関数および時刻関数です。その他の日付関数および時刻関数の詳細については、「日付関数および時刻関数」をご参照ください。