Todos os produtos
Search
Central de documentação

MaxCompute:TIME_DIFF

Última atualização: Jun 26, 2026

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

HOUR ou hh

Minuto

MINUTE ou mi

Segundo

SECOND ou ss

Milissegundo

MILLIS ou ff3

Microssegundo

MICROS ou ff6

Valor de retorno

Retorna um valor BIGINT com a diferença na unidade especificada. Aplicam-se as seguintes regras:

  • Se end_time ou start_time não for BIGINT, a função retornará erro (comportamento do MaxCompute V2.0; a versão V1.0 converte implicitamente).

  • Se end_time for menor que start_time, o valor retornado será negativo.

  • Se qualquer argumento for NULL, a função retorna NULL.

  • Se date_part nã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.