
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