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
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
-- 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]
-- 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]
-- 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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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);
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);
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.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
-- 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]
-- 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]
-- 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.

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

Seja o primeiro a comentar

Deixe uma resposta

O seu endereço de email não será publicado.


*