- Categorias:
DATEDIFF¶
Calcula a diferença entre duas expressões de data, hora ou carimbo de data/hora com base na parte de data ou hora solicitada. A função retorna o resultado da subtração do segundo argumento do terceiro argumento.
Nota
Os cálculos de diferença comparam a parte da data ou hora especificada, não a data ou hora completa. Por exemplo, a diferença de mês entre 28 de novembro de 2024 e 5 de dezembro de 2024 é 1, porque a diferença entre os dois meses de novembro e dezembro, ambos em 2024, é 1. Para refletir o fato de que a diferença entre as duas datas é menor que um mês inteiro, calcule a diferença em dias.
Também é possível usar o sinal de menos (-) para calcular a diferença entre duas datas subtraindo uma data da outra.
Para adicionar unidades de tempo a uma data, hora ou carimbo de data/hora (por exemplo, adicionar dois dias a uma data) ou subtrair unidades de tempo deles, é possível usar a função DATEADD, TIMEADD ou TIMESTAMPADD.
- Consulte também:
Sintaxe¶
Para DATEDIFF:
Para sinal de menos:
Argumentos¶
Para DATEDIFF:
date_or_time_partA unidade de tempo. Deve ser um dos valores listados em Partes de data e hora com suporte (por exemplo,
month). O valor pode ser uma cadeia de caracteres literal ou pode estar sem aspas (por exemplo,'month'oumonth).date_or_time_expr1,date_or_time_expr2Os valores a serem comparados. Deve ser uma data, uma hora, um carimbo de data/hora ou uma expressão que possa ser avaliada como uma data, uma hora ou um carimbo de data/hora. O valor
date_or_time_expr1é subtraído dedate_or_time_expr2.
Para sinal de menos:
date_expr1,date_expr2Os valores a serem comparados. Deve ser uma data ou uma expressão que possa ser avaliada como uma data. O valor
date_expr1é subtraído dedate_expr2.
Retornos¶
Para DATEDIFF:
Retorna um inteiro que representa a diferença no número de unidades (segundos, dias e assim por diante) entre date_or_time_expr2 e date_or_time_expr1.
Retorna NULL se algum argumento for NULL.
Para sinal de menos:
Retorna um número inteiro representando o número de dias de diferença entre date_expr2 e date_expr1. (As unidades são sempre dias).
Retorna um erro se date_expr2 ou date_expr1 for NULL.
Notas de uso¶
Para ambos DATEDIFF e sinal de menos:
Os valores de saída podem ser negativos, por exemplo, -12 dias.
Para DATEDIFF:
A função oferece suporte a unidades de anos, trimestres, meses, semanas, dias, horas, minutos, segundos, milissegundos, microssegundos e nanossegundos.
Se
date_or_time_partforweek(ou qualquer uma de suas variações), a saída é controlada pelo parâmetro de sessão WEEK_START. Para obter mais detalhes, incluindo exemplos, consulte Semanas do ano e dias úteis.A unidade (por exemplo,
month) usada para calcular a diferença determina quais partes do campo DATE, TIME ou TIMESTAMP são avaliadas. Então, a unidade determina a precisão do resultado.Unidades menores não são utilizadas, portanto, os valores não são arredondados. Por exemplo, mesmo que a diferença entre 1.º de janeiro de 2021 e 28 de fevereiro de 2021 esteja mais próxima de dois meses do que de um mês, o seguinte retorna um mês:
Para um valor DATE:
yearusa apenas o ano e desconsidera todas as outras partes.monthusa o mês e o ano.dayusa a data inteira.
Para um valor TIME:
hourusa apenas a hora e desconsidera todas as outras partes.minuteusa a hora e o minuto.secondusa a hora, minuto e segundo, mas não os segundos fracionários.millisecondusa a hora, minuto, segundo e os três primeiros dígitos dos segundos fracionários. Os segundos fracionários não são arredondados. Por exemplo,DATEDIFF(milliseconds, '2024-02-20 21:18:41.0000', '2024-02-20 21:18:42.1239')retorna 1.123 segundos, não 1.124 segundos.microsecondusa a hora, minuto, segundo e os primeiros seis dígitos dos segundos fracionários. Os segundos fracionários não são arredondados.nanosecondusa a hora, minuto, segundo e todos os nove dígitos dos segundos fracionários.
Para um valor TIMESTAMP:
As regras correspondem às regras para tipo de dados DATE e TIME acima. Somente a unidade especificada e unidades maiores são utilizadas.
Para sinal de menos:
date_expr1edate_expr2devem ser ambos datas. Não são permitidos carimbos de data/hora e horas.
Exemplos¶
Calcular a diferença em anos entre dois carimbos de data/hora:
Calcular a diferença em horas entre dois carimbos de data/hora:
Demonstrar como as partes da data afetam os cálculos de DATEDIFF; também, demonstrar o uso do sinal de menos para subtração de data:
Demonstrar como as partes de tempo afetam os cálculos de DATEDIFF:
Use a função CURRENT_TIMESTAMP com a função DATEDIFF para calcular a diferença em anos, meses e dias entre um carimbo de data/hora especificado e o carimbo de data/hora atual: