Pular para o conteúdo principal

FUNÇÃO SQL DATEDIFF()

DATEDIFF() é uma das funções de manipulação de dados de data mais usadas no SQL. Domine-o lendo este tutorial.
· 3 min leer

Explore com IA

O que é o DATEDIFF() função?

A função DATEDIFF() retorna o intervalo entre dois registros de data e hora ou valores de data em uma unidade especificada. 

DATEDIFF() syntax

DATEDIFF(datepart, startdate, enddate)

Parâmetro

O que é isso?

datepart

Um parâmetro obrigatório. Essa é a unidade na qual DATEDIFF() informa a diferença entre startdate e enddate. Consulte a seção a seguir para saber os diferentes tipos de valores que ele pode conter. 

startdate

Um required que significa um valor de data e hora que indica a data de início. 

enddate

Um required que significa um valor de data e hora que indica a data final. 

datepart syntax 

O parâmetro datepart pode assumir vários valores, incluindo os seguintes 

  • Ano: year, y, yy, ou yyyy
  • Trimestre: quarter, qq, q
  • Mês: month, mm, m
  • Dia: dayofyear, day, dd, d
  • Semana: week, wk, ww
  • Hora: hour, hh
  • Minuto: minute, mi, n
  • Segundo: second, ss, s
  • Milissegundos: millisecond, ms
  • Microssegundo: microsecond, mcs
  • Nanossegundo: nanosecond, ns

 Observe que o endereço datepart não deve ser colocado entre aspas. Por exemplo, a sintaxe a seguir está correta:

DATEDIFF(year, ‘2022-01-01', ‘2022-01-02')

A afirmação a seguir está incorreta.

DATEDIFF(‘year', ‘2022-01-01', ‘2022-01-02')

DATEDIFF() exemplos

Ao trabalhar com DATEDIFF(), os resultados podem ser valores positivos ou negativos. Se enddate for posterior a startdate, então DATEDIFF() retornará um valor positivo. Se enddate for anterior a startdate, DATEDIFF() retornará um valor negativo. 

Exemplo 1: Encontre a diferença entre duas datas

SELECT DATEDIFF(timepart, ‘2022-12-31', ‘2024-06-01')

Consulta

Saída

SELECT DATEDIFF(year, ‘2022-12-31', ‘2024-06-01')

1

SELECT DATEDIFF(quarter, ‘2022-12-31', ‘2024-06-01')

2

SELECT DATEDIFF(month, ‘2022-12-31', ‘2024-06-01')

6

SELECT DATEDIFF(day, ‘2022-12-31', ‘2024-06-01')

153

SELECT DATEDIFF(week, ‘2022-12-31', ‘2024-06-01')

21

Exemplo 2: Encontre a diferença entre dois registros de data e hora

SELECT DATEDIFF(datepart, '2023-12-31 00:00:00, '2023-12-31 00:59:59')

Consulta

Saída

SELECT DATEDIFF(hour,'2023-12-31 00:00:00', '2023-12-31 00:59:59')

0

SELECT DATEDIFF(minute,'2023-12-31 00:00:00','2023-12-31 00:59:59')

59

SELECT DATEDIFF(second,'2023-12-31 00:00:00','2023-12-31 00:59:59')

3599

SELECT DATEDIFF(millisecond,'2023-12-31 00:00:00','2023-12-31 00:59:59')

3599000

Exemplo 3: Encontre a diferença entre duas colunas de datas

Considere a tabela sales.orders, que contém essas colunas:

  • order_date (quando o pedido é feito) 
  • shipped_date (quando o pedido for enviado)

Para rastrear o tempo de entrega da remessa, podemos usar a função DATEDIFF().

SELECT
    order_id,
    order_date,
    shipped_date,
    DATEDIFF(day, order_date, shipped_date) order_to_ship_days
FROM sales.orders

order_id

order_date

shipped_date

order_to_ship_days

1

2016-01-01T00:00:00.000Z

2016-01-03T00:00:00.000Z

2

2

2016-01-01T00:00:00.000Z

2016-01-03T00:00:00.000Z

2

3

2016-01-02T00:00:00.000Z

2016-01-03T00:00:00.000Z

1

Exemplo 4. Encontre o intervalo entre a data de hoje e uma coluna

Usando a tabela sales.orders como no Exemplo 3, podemos usar DATEDIFF() para encontrar o intervalo entre a data de hoje e a data em que um pedido é feito.

SELECT
   order_id,
   order_date,
   GETDATE() AS todays_date,
   DATEDIFF(day, order_date, GETDATE()) AS order_to_today -- interval between order_date with today's date
FROM sales.orders

order_id

order_date

shipped_date

order_to_ship_days

1

2016-01-01T00:00:00.000Z

2022-10-09T02:47:00.403Z

2473

2

2016-01-01T00:00:00.000Z

2022-10-09T02:47:00.403Z

2473

3

2016-01-02T00:00:00.000Z

2022-10-09T02:47:00.403Z

2472

Notas adicionais

A função DATEDIFF() retornará um erro se o resultado estiver fora do intervalo (ou seja, o valor for maior que +2.147.483.647 ou menor que -2.147.483.647). Nesse caso, a função DATEDIFF_BIG() é adequada. 

Requisitos técnicos

Funciona no SQL Server (a partir de 2008), no Banco de Dados SQL do Azure, no Azure SQL Data Warehouse, no Parallel Data Warehouse

Veja também

Saiba mais sobre o SQL

Temas

Relacionado

Tutorial

FUNÇÃO SQL FORMAT()

Tutorial

FUNÇÃO SQL COUNT()