Curso
¿Qué es la función DATEDIFF() ?
La función DATEDIFF() devuelve el intervalo entre dos marcas de tiempo o valores de fecha en una unidad especificada.
DATEDIFF() y su sintaxis
DATEDIFF(datepart, startdate, enddate)
|
Parámetro |
¿Qué es? |
|
|
Un parámetro obligatorio. Es la unidad en la que |
|
|
Un parámetro obligatorio que indica un valor datetime que denota la fecha de inicio. |
|
|
Un parámetro obligatorio indica un valor datetime que denota la fecha final. |
datepart y su sintaxis
El parámetro datepart puede tomar muchos valores, entre ellos los siguientes
- Año:
year,y,yy, oyyyy - Trimestre:
quarter,qq,q - Mes:
month,mm,m - Día:
dayofyear,day,dd,d - Semana:
week,wk,ww - Hora:
hour,hh - Minuto:
minute,mi,n - Segundo:
second,ss,s - Milisegundo:
millisecond,ms - Microsegundo:
microsecond,mcs - Nanosegundo:
nanosecond,ns
Ten en cuenta que datepart no debe ir entre comillas. Por ejemplo, la sintaxis siguiente es correcta:
DATEDIFF(year, ‘2022-01-01', ‘2022-01-02')
Lo siguiente es incorrecto.
DATEDIFF(‘year', ‘2022-01-01', ‘2022-01-02')
DATEDIFF() , ejemplos
Al trabajar con DATEDIFF(), los resultados pueden ser valores positivos o negativos. Si enddate es posterior a startdate, entonces DATEDIFF() devuelve un valor positivo. Si enddate es anterior a startdate, DATEDIFF() devuelve un valor negativo.
Ejemplo 1: encuentra la diferencia entre dos fechas
SELECT DATEDIFF(timepart, ‘2022-12-31', ‘2024-06-01')
|
Consulta |
Salida |
|
|
1 |
|
|
2 |
|
|
6 |
|
|
153 |
|
|
21 |
Ejemplo 2: encuentra la diferencia entre dos marcas de tiempo
SELECT DATEDIFF(datepart, '2023-12-31 00:00:00, '2023-12-31 00:59:59')
|
Consulta |
Salida |
|
|
0 |
|
|
59 |
|
|
3599 |
|
|
3599000 |
Ejemplo 3: encuentra la diferencia entre dos columnas de fecha
Considera la tabla sales.orders, que contiene estas columnas:
order_date(al realizar el pedido)shipped_date(cuando se envíe el pedido)
Para hacer un seguimiento del plazo de entrega, podemos utilizar la función DATEDIFF().
SELECT
order_id,
order_date,
shipped_date,
DATEDIFF(day, order_date, shipped_date) order_to_ship_days
FROM sales.orders
|
|
|
|
|
|
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 |
Ejemplo 4 halla el intervalo entre la fecha de hoy y una columna
Utilizando la tabla sales.orders como en el Ejemplo 3, podemos utilizar DATEDIFF() para hallar el intervalo entre la fecha de hoy y la fecha en que se realiza un pedido.
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
|
|
|
|
|
|
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 adicionales
La función DATEDIFF() devuelve un error si el resultado está fuera de rango (es decir, el valor es mayor que +2.147.483.647 o menor que -2.147.483.647). En este caso, la función DATEDIFF_BIG() es adecuada.
Requisitos técnicos
Funciona en SQL Server (a partir de 2008), Azure SQL Database, Azure SQL Data Warehouse, Parallel Data Warehouse