A função TIME_DIFF calcula a diferença entre dois valores de tempo e retorna o resultado como BIGINT na unidade de tempo especificada.
Sintaxe
BIGINT TIME_DIFF(BIGINT <end_time>, BIGINT <start_time>, STRING <date_part>)
Exemplo rápido:
-- Returns 1106600.
SELECT TIME_DIFF(1230000, 123400, 'ff6');
Parâmetros
end_time, start_time
Obrigatórios. Valores BIGINT que representam o tempo em microssegundos. Use a função TO_TIME para construir esses valores.
Na edição de tipos de dados do MaxCompute V1.0, as entradas STRING e DOUBLE são convertidas implicitamente para BIGINT. No MaxCompute V2.0, entradas não BIGINT retornam erro.
date_part
Obrigatório. Constante STRING que especifica a unidade de tempo do valor de retorno.
|
Unidade |
Valores aceitos |
|
Hora |
|
|
Minuto |
|
|
Segundo |
|
|
Milissegundo |
|
|
Microssegundo |
|
Valor de retorno
Retorna um valor BIGINT com a diferença na unidade especificada. Aplicam-se as seguintes regras:
Se
end_timeoustart_timenão for BIGINT, a função retornará erro (comportamento do MaxCompute V2.0; a versão V1.0 converte implicitamente).Se
end_timefor menor questart_time, o valor retornado será negativo.Se qualquer argumento for NULL, a função retorna NULL.
Se
date_partnão for constante, estiver em formato não suportado ou não for STRING, a função retorna erro.
Notas de uso
Truncamento, não arredondamento
A função TIME_DIFF trunca o resultado para a unidade especificada, sem arredondar. Por exemplo, uma diferença de 2 horas e 34 minutos retorna 2 quando date_part é 'hour', e não 3.
Exemplos
Comparar um par de horários em várias unidades
Os exemplos a seguir usam os mesmos dois valores de tempo (09:39:30 e 12:14:10) para demonstrar como date_part afeta o resultado.
-- Enable the MaxCompute V2.0 data type edition.
SET odps.sql.type.system.odps2 = true;
-- Returns 2. The actual difference is 2h 34m 40s, truncated to hours.
SELECT TIME_DIFF(TO_TIME(12,14,10), TO_TIME(09,39,30), 'hour');
-- Returns 154. Truncated to whole minutes.
SELECT TIME_DIFF(TO_TIME(12,14,10), TO_TIME(09,39,30), 'minute');
-- Returns 9280. Truncated to whole seconds.
SELECT TIME_DIFF(TO_TIME(12,14,10), TO_TIME(09,39,30), 'second');
Calcular a diferença em microssegundos
-- Returns 1106600.
SELECT TIME_DIFF(1230000, 123400, 'ff6');
Calcular a diferença em milissegundos
-- end_time (15:39:10) is earlier than start_time (15:39:30), so the result is negative.
-- Returns -20000.
SELECT TIME_DIFF(TO_TIME(15,39,10), TO_TIME(15,39,30), 'ff3');
Calcular a diferença a partir de um TIMESTAMP
-- Enable the MaxCompute V2.0 data type edition.
SET odps.sql.type.system.odps2 = true;
-- Returns 10.
SELECT TIME_DIFF(
TO_TIME(TIMESTAMP '2025-03-27 15:39:40'),
TO_TIME(TIMESTAMP '2025-03-27 15:39:30'),
'second'
);
Lidar com entradas NULL
Qualquer argumento NULL faz a função retornar NULL.
-- Returns NULL.
SELECT TIME_DIFF(NULL, TO_TIME(12,0,0), 'minute');
-- Returns NULL.
SELECT TIME_DIFF(TO_TIME(12,0,0), NULL, 'minute');
-- Returns NULL.
SELECT TIME_DIFF(TO_TIME(12,0,0), TO_TIME(12,10,0), NULL);
Funções relacionadas
TIME_DIFF é uma função de data e hora. Para obter mais informações sobre outras funções desse tipo, consulte Funções de data e hora.