As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Função DATEDIFF
DATEDIFF retorna a diferença entre as partes de data de duas expressões de data ou hora.
Sintaxe
DATEDIFF ( datepart, {date|time|timetz|timestamp}, {date|time|timetz|timestamp} )
Argumentos
- datepart
-
A parte específica do valor de data ou hora (ano, mês ou dia, hora, minuto, segundo, milissegundo ou microsegundo) sobre a qual a função atua. Para ter mais informações, consulte Partes da data para funções de data ou de timestamp.
Especificamente, DATEDIFF determina o número de limites da parte da data que são cruzados entre duas expressões. Por exemplo, suponha que você esteja calculando a diferença em anos entre duas datas,
12-31-2008
e01-01-2009
. Neste caso, a função retorna 1 ano, apesar do fato de que essas datas são apenas um dia de diferença. Se você estiver encontrando a diferença em horas entre dois timestamps,01-01-2009 8:30:00
e01-01-2009 10:00:00
, o resultado é 2 horas. Se você estiver encontrando a diferença em horas entre dois timestamps,8:30:00
e10:00:00
, o resultado é 2 horas. - date|time|timetz|timestamp
-
Uma coluna ou expressões DATE, TIME, TIMETZ ou TIMESTAMP que implicitamente convertem em DATE, TIME, TIMETZ ou TIMESTAMP. As expressões devem conter a parte da data ou hora especificada. Se a segunda data ou hora for mais recente do que a primeira data ou hora, o resultado será positivo. Se a segunda data ou hora for mais antiga do que a primeira data ou hora, o resultado será negativo.
Tipo de retorno
BIGINT
Exemplos com uma coluna DATE
O exemplo a seguir encontra a diferença, em número de semanas, entre dois valores de data literais.
select datediff(week,'2009-01-01','2009-12-31') as numweeks; numweeks ---------- 52 (1 row)
O exemplo a seguir encontra a diferença, em horas, entre dois valores de data literais. Quando você não fornece o valor de hora para uma data, o padrão é 00:00:00.
select datediff(hour, '2023-01-01', '2023-01-03 05:04:03'); date_diff ---------- 53 (1 row)
O exemplo a seguir encontra a diferença, em dias, entre dois valores literais de TIMESTAMETZ.
Select datediff(days, 'Jun 1,2008 09:59:59 EST', 'Jul 4,2008 09:59:59 EST')
date_diff ---------- 33
O exemplo a seguir encontra a diferença, em dias, entre duas datas na mesma linha de uma tabela.
select * from date_table; start_date | end_date -----------+----------- 2009-01-01 | 2009-03-23 2023-01-04 | 2024-05-04 (2 rows) select datediff(day, start_date, end_date) as duration from date_table; duration --------- 81 486 (2 rows)
O exemplo a seguir encontra a diferença, em número de trimestres, entre um valor literal no passado e a data de hoje. Este exemplo presume que a data atual seja 5 de junho de 2008. Você pode nomear as partes da data por completo ou abreviá-las. O nome padrão da coluna para a função DATEDIFF é DATE_DIFF.
select datediff(qtr, '1998-07-01', current_date); date_diff ----------- 40 (1 row)
O exemplo a seguir une as tabelas SALES e LISTING para calcular quantos dias os ingressos foram vendidos para as listagens 1000 a 1005 depois de serem listados. A espera mais longa para vendas dessas ofertas foi de 15 dias e a espera mais curta foi de menos de um dia (0 dias).
select priceperticket, datediff(day, listtime, saletime) as wait from sales, listing where sales.listid = listing.listid and sales.listid between 1000 and 1005 order by wait desc, priceperticket desc; priceperticket | wait ---------------+------ 96.00 | 15 123.00 | 11 131.00 | 9 123.00 | 6 129.00 | 4 96.00 | 4 96.00 | 0 (7 rows)
Este exemplo calcula o número médio de horas que os vendedores esperaram para todas as vendas de ingressos.
select avg(datediff(hours, listtime, saletime)) as avgwait from sales, listing where sales.listid = listing.listid; avgwait --------- 465 (1 row)
Exemplos com uma coluna TIME
O TIME_TEST da tabela a seguir tem uma coluna TIME_VAL (tipo TIME) com três valores inseridos.
select time_val from time_test; time_val --------------------- 20:00:00 00:00:00.5550 00:58:00
O exemplo a seguir localiza a diferença no número de horas entre a coluna TIME_VAL e um literal de tempo.
select datediff(hour, time_val, time '15:24:45') from time_test; date_diff ----------- -5 15 15
O exemplo a seguir localiza a diferença no número de minutos entre dois valores de tempo literal.
select datediff(minute, time '20:00:00', time '21:00:00') as nummins; nummins ---------- 60
Exemplos com uma coluna TIMETZ
O TIMETZ_TEST da tabela de exemplo a seguir tem uma coluna TIMETZ_VAL (tipo TIMETZ) com três valores inseridos.
select timetz_val from timetz_test; timetz_val ------------------ 04:00:00+00 00:00:00.5550+00 05:58:00+00
O exemplo a seguir localiza as diferenças no número de horas, entre um literal TIMETZ e timetz_val.
select datediff(hours, timetz '20:00:00 PST', timetz_val) as numhours from timetz_test; numhours ---------- 0 -4 1
O exemplo a seguir localiza a diferença no número de horas, entre dois valores TIMETZ literal.
select datediff(hours, timetz '20:00:00 PST', timetz '00:58:00 EST') as numhours; numhours ---------- 1