Função DATEDIFF - Amazon Redshift

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 e 01-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 e 01-01-2009 10:00:00, o resultado é 2 horas. Se você estiver encontrando a diferença em horas entre dois timestamps, 8:30:00 e 10: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