Diferença entre duas datas com SQL Server em horas, minutos e segundos

Como calcular a diferença entre duas datas com SQL Server 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.

Consultas T-SQL para calcular a diferença entre datas

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.

1. Calcular a diferença de tempo em horas minutos e segundos

As consultas abaixo mostram 3 tipos diferentes de resultados. No entanto, cada unidade de tempo não é um tempo, mas apenas uma única unidade. Portanto, é obrigatório concatená-los e convertê-los.

  • Primeiro, calcular a diferença em segundos
  • Depois minutos
  • Duram as horas
-- Declare e inicialize duas variáveis com exactamente uma hora de diferença: 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'

-- 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 [Difference in Hours]

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

2. Diferença entre duas datas numa única consulta T-SQL

Para obter a diferença em horas, minutos e segundos, utilize esta consulta, ela só funciona se as horas forem inferiores a 99. Este código utiliza a função de texto RIGHT. 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);

3. Diferença entre duas datas com uma consulta SQL Server

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 , getdate()), 108) AS [Horas Minutos Segundos]

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

Neste tutorial vimos como calcular uma diferença entre duas datas com SQL Server em horas minutos e segundos. Aqui está a documentação oficial do Microsoft SQL Server sobre a função de tempo DATEADD(). Aqui está um tutorial para aprender a copiar recursivamente ficheiros a partir da linha de comando.

Copiar recursivamente ficheiros com cmd

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

Leave a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *