Función DATEDIFF - Amazon Redshift

Función DATEDIFF

DATEDIFF devuelve la diferencia entre las partes de fecha de dos expresiones de fecha u hora.

Sintaxis

DATEDIFF( datepart, {date|time|timetz|timestamp}, {date|time|timetz|timestamp} )

Argumentos

datepart

La parte específica del valor de fecha u hora (año, mes o día; hora, minuto, segundo, milisegundo o microsegundo) sobre la que opera la función. Para obtener más información, consulte Partes de fecha para funciones de fecha o marca temporal.

En concreto, DATEDIFF determina la cantidad de límites de la parte de fecha que se cruzan entre las dos expresiones. Suponga, por ejemplo, que calcula la diferencia en años entre dos fechas, 12-31-2008 y 01-01-2009. En este caso, la función devuelve 1 año a pesar de que estas fechas solo tienen un día de diferencia. Si busca la diferencia en horas entre dos marcas temporales, 01-01-2009 8:30:00 y 01-01-2009 10:00:00, el resultado es 2 horas. Si busca la diferencia en horas entre dos marcas temporales, 8:30:00 y 10:00:00, el resultado es 2 horas.

date|time|timetz|timestamp

Una columna o expresiones de DATE, TIME, TIMETZ o TIMESTAMP que se convierten de forma implícita en DATE, TIME, TIMETZ o TIMESTAMP. Ambas expresiones deben contener la parte de fecha u hora especificada. Si la segunda fecha u hora es posterior a la primera, el resultado es positivo. Si la segunda fecha u hora es anterior a la primera, el resultado es negativo.

Tipo de retorno

BIGINT

Ejemplos con una columna DATE

En el siguiente ejemplo, se encuentra la diferencia, en cantidad de semanas, entre dos valores de fecha literales.

select datediff(week,'2009-01-01','2009-12-31') as numweeks; numweeks ---------- 52 (1 row)

En el siguiente ejemplo, se encuentra la diferencia, en horas, entre dos valores de fecha literales. Cuando no se proporciona el valor de la hora para una fecha, de forma predeterminada es 00:00:00.

select datediff(hour, '2023-01-01', '2023-01-03 05:04:03'); date_diff ---------- 53 (1 row)

En el siguiente ejemplo se encuentra la diferencia, en días, entre dos valores TIMESTAMETZ literales.

Select datediff(days, 'Jun 1,2008 09:59:59 EST', 'Jul 4,2008 09:59:59 EST') date_diff ---------- 33

En el siguiente ejemplo, se encuentra la diferencia, en días, entre dos fechas de la misma fila de una tabla.

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)

En el siguiente ejemplo, se encuentra la diferencia, en cantidad de trimestres, entre un valor literal del pasado y la fecha de hoy. En este ejemplo, se asume que la fecha actual es 5 de junio del 2008. Puede nombrar las partes de la fecha de manera completa o abreviada. El nombre predeterminado de la columna para la función DATEDIFF es DATE_DIFF.

select datediff(qtr, '1998-07-01', current_date); date_diff ----------- 40 (1 row)

En este ejemplo, se unen las tablas SALES y LISTING para calcular cuántos días después de indicarse se vendieron los tickets de los listados 1000 a 1005. La espera más prolongada para la venta de estos listados fue de 15 días, y la más corta, de menos de 1 día (0 días).

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)

En este ejemplo, se calculan las horas promedio esperadas por los vendedores para todas las ventas de tickets.

select avg(datediff(hours, listtime, saletime)) as avgwait from sales, listing where sales.listid = listing.listid; avgwait --------- 465 (1 row)

Ejemplos con una columna TIME

La siguiente tabla de ejemplo, TIME_TEST, tiene una columna TIME_VAL (tipo TIME) con tres valores insertados.

select time_val from time_test; time_val --------------------- 20:00:00 00:00:00.5550 00:58:00

En el siguiente ejemplo, se encuentra la diferencia en cantidad de horas entre la columna TIME_VAL y un literal de tiempo.

select datediff(hour, time_val, time '15:24:45') from time_test; date_diff ----------- -5 15 15

En el siguiente ejemplo, se encuentra la diferencia en cantidad de minutos entre dos valores de tiempo literales.

select datediff(minute, time '20:00:00', time '21:00:00') as nummins; nummins ---------- 60

Ejemplos con una columna TIMETZ

La siguiente tabla de ejemplo, TIMETZ_TEST, tiene una columna TIMETZ_VAL (tipo TIMETZ) con tres valores insertados.

select timetz_val from timetz_test; timetz_val ------------------ 04:00:00+00 00:00:00.5550+00 05:58:00+00

En el siguiente ejemplo, se encuentran las diferencias en la cantidad de horas, entre un literal TIMETZ y timetz_val.

select datediff(hours, timetz '20:00:00 PST', timetz_val) as numhours from timetz_test; numhours ---------- 0 -4 1

En el siguiente ejemplo, se encuentra la diferencia en cantidad de horas entre dos valores TIMETZ literales.

select datediff(hours, timetz '20:00:00 PST', timetz '00:58:00 EST') as numhours; numhours ---------- 1