Diferença de datas do SQL Server em horas, minutos e segundos

Como calcular a diferença horária em horas minutos ou segundos no SQL Server? A função DATEDIFF() do SQL Server permite-nos calcular a diferença entre dois carimbos temporais, mas apenas numa unidade. Por exemplo, apenas em segundos, ou apenas em minutos ou apenas em horas. Assim, calcular a diferença entre uma data de início e uma data de fim não é simples com o SQL Server. Este post mostra-lhe como fazê-lo com uma simples consulta de exemplo, explicada passo a passo.

Como calcular a diferença de tempo em horas, minutos ou segundos com o SQL Server?

Como exemplo, esta simples consulta SQL está a utilizar DATEDIFF() com dois timestamps com exactamente uma hora de diferença. E cada consulta dá apenas uma unidade. Assim, basicamente, temos de combinar ou concatenar várias consultas para obter as horas, minutos e segundos dentro de uma única consulta SQL. Abaixo de cada consulta é devolvida uma unidade.

CLARARAR @DATAEnd DATETIME
SET @DateStart = '2017-03-10 08:00:00'
SET @DateEnd = '2017-03-10 09:00:00'
-- SQL Query retorna a diferença em segundos : 3600 segundos
SELECT DATEDIFF(SECOND, @DateStart, @DateEnd) AS [Difference in Seconds]
-- SQL Query retorna a diferença em minutos : 60 minutos
SELECT DATEDIFF(MINUTE, @DateStart, @DateEnd) AS [Difference in Minutes]
-- SQL Query retorna a diferença em horas : 1 hora
SELECT DATEDIFF(HOUR, @DateStart, @DateEnd) AS [Diferença em Horas]

Abaixo estão duas formas diferentes de calcular a diferença horária entre duas datas.

A primeira solução para obter a diferença entre dois carimbos temporais numa única consulta

Para obter a diferença em horas, minutos e segundos, utilize esta consulta, ela só funciona se as horas forem inferiores a 99.
Alterar o total em segundos em Horas, Minutos e Segundos, por exemplo com 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)

A segunda solução consiste em calcular a diferença entre as datas dadas numa consulta

Estas consultas SQL calculam a diferença de tempo usando primeiro os segundos (multiplicado por uma hora em segundos é 60 * 60 = 3600. Depois utilizando os milisegundos (multiplicado por uma hora em milisegundos como 60 * 60 * 1000 = 3600 * 1000 ).

Finalmente mostra o resultado sem os milissegundos usando a função CONVERT() e o formato de data de dados 108.

-- Usando os segundos como base para a conversão
select CONVERT(varchar, dateadd(s, 3 * 3600 , get date()), 108) AS [Horas Minutos Segundos]
-- Usando os milissegundos como base para a conversão
select CONVERT(varchar, dateadd(ms, 3 * 3600 * 1000, get date()), 108) AS [Horas Minutos Segundos]


Neste pequeno post vimos como calcular uma diferença de data do SQL Server em horas minutos e segundos.

Aqui está a documentação oficial do Microsoft SQL Server sobre a função de tempo DATEADD().

Foi útil para si? Se sim, por favor use-a e partilhe-a!

Seja o primeiro a comentar

Deixe uma resposta