Diferencia de fechas SQL Server en horas minutos y segundos

Cómo calcular la diferencia de fechas SQL Server en horas minutos y segundos? La función DATEDIFF() de SQL Server nos permite calcular la diferencia entre dos marcas de tiempo, 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 post muestra cómo hacerlo con una simple consulta de ejemplo, explicada paso a paso.

¿Cómo calcular la diferencia de fechas SQL Server en horas minutos y segundos?

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.

1 – La primera solución para obtener la diferencia entre dos marcas de tiempo 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)

2 – La segunda solución es calcular la diferencia entre las fechas dadas en una consulta

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
seselect 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().

¿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.


*