Diferencia entre dos fechas SQL Server en horas y minutos

Cómo calcular la diferencia entre dos fechas SQL Server en horas minutos y segundos?

Utiliza la función DATEDIFF() de SQL Server nos permite calcular la diferencia entre dos fechas, pero sólo en una unidad. Por ejemplo, sólo segundos, o sólo minutos o sólo horas. Por lo tanto, calcular la diferencia entre una fecha inicial y una fecha final no es sencillo con SQL Server. Este tutorial muestra cómo hacerlo con una simple consulta de ejemplo, explicada paso a paso.

1. Obtener los segundos, minutos y horas en 3 consultas

Como ejemplo, esta sencilla consulta SQL utiliza DATEDIFF() con dos marcas de tiempo que tienen exactamente una hora de diferencia. Y cada consulta da una sola unidad. Así que básicamente, debemos combinar o concatenar varias consultas para obtener las horas, minutos y segundos dentro de una única consulta SQL. A continuación, cada consulta devuelve una unidad.

-- Declarar e inicializar dos variables con exactamente una hora de diferencia: 9 - 8 = 1h 
DECLARE @DateStart    DATETIME
DECLARE @DateEnd    DATETIME
SET @DateStart    = '2017-03-10 08:00:00'
SET @DateEnd    = '2017-03-10 09:00:00'

-- La consulta SQL devuelve la diferencia en segundos : 3600 segundos
SELECT DATEDIFF(SECOND, @DateStart, @DateEnd) AS [Diferencia en segundos]

-- La consulta SQL devuelve la diferencia en minutos : 60 minutos
SELECT DATEDIFF(MINUTE, @DateStart, @DateEnd) AS [Diferencia en Minutos]

-- La consulta SQL devuelve la diferencia en horas : 1 hora
SELECT DATEDIFF(HOUR, @DateStart, @DateEnd)  AS [Diferencia en Horas]

A continuación, se muestran dos formas diferentes de calcular la diferencia horaria entre dos fechas.

2. Diferencia entre dos fechas en una sola consulta

Para obtener la diferencia en horas, minutos y segundos, utilice esta consulta, sólo funciona si las horas son menores que 99. Cambie el total en segundos en horas, minutos y segundos, por ejemplo, con 3 horas = 3600 * 3 = 14400.

DECLARE @TimeInSeconds INT
SET    @TimeInSeconds = 14400

SELECT
RIGHT('0' + CAST(@TimeInSeconds / 3600 AS VARCHAR),2) + ':' +
RIGHT('0' + CAST((@TimeInSeconds / 60) % 60 AS VARCHAR),2) + ':' +
RIGHT('0' + CAST(@TimeInSeconds % 60 AS VARCHAR),2)

3. Calcular la diferencia entre las fechas con Convert y Dateadd

Estas consultas SQL calculan la diferencia de tiempo usando primero los segundos (multiplicado por una hora en segundos es 60 * 60 = 3600. A continuación, utilizando los milisegundos (multiplicado por una hora en milisegundos como 60 * 60 * 1000 = 3600 * 1000).

Finalmente muestra el resultado sin los milisegundos usando la función CONVERT y el formato de fecha de los datos 108.

-- Utilizando los segundos como base para la conversión
select CONVERT(varchar, dateadd(s, 3 * 3600 , getdate()), 108) AS [Horas Minutos Segundos]

-- Utilizando los milisegundos como base para la conversión
select CONVERT(varchar, dateadd(ms, 3 * 3600 * 1000, getdate()), 108) AS [Horas Minutos Segundos]

En este breve post hemos visto cómo calcular una diferencia de fecha de SQL Server en horas minutos y segundos. Aquí está la documentación oficial de Microsoft SQL Server sobre la función de tiempo DATEADD.

Aquí están los tutoriales para gestionar las tablas de SQL Server, es decir, cómo crearlas, modificarlas y eliminarlas con scripts T-SQL.

¿Te ha sido útil? Si es así, ¡utilízala y compártela!

Be the first to comment

Leave a Reply

Tu dirección de correo no será publicada.


*