Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Caduzera

[Resolvido] Cálculo de horas .... SQL Server

Recommended Posts

Pessoal estou migrando um sistema de Firebird para SQL Server e estou com dificuldades de cálculos de datas e horas no banco.

 

Tenho a seguinte expressão em uma Query de minha aplicação: "((DATA_HORA1 - (DATA_HORA2 + DATA_HORA3)) * 24) AS HORAS_CORRIDAS"

 

Depois deste cálculo eu mostro a diferença de horas que ocorre entre as datas.

 

Alguem tem alguma idéia??

 

Valeu !!

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce pode converter a diferença em minutos fazer o calculo depois converter novamente em Hora assim que eu faço.

 

Segue abaixo uma função q pega os minutos entre 2 datas. :joia:

 

 

CREATE FUNCTION [dbo].[MINUTOS](
 @Data1 DateTime, @Data2 DateTime
)
RETURNS INT
begin
DECLARE @MINUTOS INT
DECLARE @HORAS INT
DECLARE @DIAS INT
IF DATEPART(DAY, @DATA1) <> DATEPART(DAY, @DATA2)
BEGIN
	IF DATEPART(DAY, @DATA1) < DATEPART(DAY, @DATA2)
	BEGIN
		SET @DIAS = DATEPART(DAY, @DATA2) - DATEPART(DAY, @DATA1)
	END
END
ELSE
	SET @DIAS = 0
SET @MINUTOS = ((DATEPART(HOUR, @DATA2) - DATEPART(HOUR, @DATA1))*60) + ((DATEPART(minutE, @DATA2) - DATEPART(minutE, @DATA1)))
RETURN convert(Varchar(15),@DIAS * 1440) + @MINUTOS 
end

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu pela resposta ... já me deu uma luz.

 

Mas o problema é: Eu tenho que saber a quantidade de horas que existe entre as datas segundo o cálculo que informei, porém, o calculo que mostrei (e uso no Firebird) ele já calcula junto a Data e Hora fazendo que o cálculo seja mais simples.

 

Agora parece que no SQL Server é preciso separar todas informações (Dia, Mes, Ano, Hora, Minuto, Segundos), fazer os calculos de cada um idependentemente e depois juntar tudo, porém, isso implica em um aumento de dificuldades em se fazer algo simples como isso.

 

Alguem terei mais alguma dica de como fazer o cálculo??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal consegui resolver a situação ...

 

Vou deixar aqui o que fiz caso alguem precise ...

CAST(DATEDIFF(MI, DATA_HORA01, (DATA_HORA02 + DATA_HORA03)) / 60 AS VARCHAR(4)) + ':' +

CAST(DATEDIFF(MI, DATA_HORA01, (DATA_HORA02 + DATA_HORA03)) % 60 AS VARCHAR(4)) + ':' +

CAST(DATEDIFF(SS, DATA_HORA01, (DATA_HORA02 + DATA_HORA03)) % 60 AS VARCHAR(4))

 

Este procedimento retorna o intervalo de Horas, Minutos e Segundos entre datas ... !!

 

Valeu pelas dicas !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.