Código:
y pueden probar la funcion con una simple consulta: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
Código:
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 equivalenteselect [dbo].[DIFFTIME]('9:00','8:45:00') --devuelve 00:15:00.0000000 --explicacion 9:00-8:45 = 00:15:00.0000000
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