hola a todos, quiero dar mi aporte en esta ocasion, ante la imposibilidad de restar horas(como asi tambien sumar) en una consulta sql de forma directa, me vi obligado a crearme una funcion en el motor de sql, dicha funcion expongo a continuacion:
Código:
USE [MiBD]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[DIFFTIME](@HoraFin as time,@HoraInicio as time)
RETURNS time AS
BEGIN
--esta funcion obtiene la diferencia de horas: HoraFin-HoraInicio, y devuelve el resultado en formato tiempo,siempre devuelve el resultado positivo
DECLARE
@sols int,@tsolucion time
SET @sols=DATEDIFF(SECOND,@HoraInicio,@HoraFin)--diferencia en segundos
SET @tsolucion=convert(time,dateadd(SECOND,@sols,0))
RETURN @tsolucion
END
y pueden probar la funcion con una simple consulta:
Código:
select [dbo].[DIFFTIME]('9:00','8:45:00')
--devuelve 00:15:00.0000000
--explicacion 9:00-8:45 = 00:15:00.0000000
la funcion esta bien y funciona, solo le pille un incoveniente, cuando resto horas y el resultado me sale negativo, pues mi funcion no me devuelve nunca un resultado negativo, ya q el tipo time puede tener un valor minimo de 00:00:00.0000000 , en estos casos particulares q mi funcion debiera devolver un negativo, mi funcion devuelve un valor positivo equivalente
ejm: 8:00-9:00= 23:00 (el resultado debio ser -01:00,pero al no haber negativos en el tipo time, hace la resta al valor maximo del tipo time es decir 24:00... )
habra q tomar las consideraciones del caso, saludos