CREATE FUNCTION [dbo].[HoraInicialint]
( @HISAP2 nvarchar(10),
@HFSAP2 nvarchar(10),
@FISAP DateTIME ,
@FFSAP DATEtime
)
RETURNS nvarchar(10)
AS
BEGIN
DECLARE @HIFF VARCHAR (10)
DECLARE @HFFF VARCHAR (10)
DECLARE @DifDIas nvarchar(10)
DECLARE @HP1 nvarchar (10)
DECLARE @HP2 nvarchar (10)
DECLARE @Salida nVarchar(20)
DECLARE @HISAPV VARCHAR (10)
DECLARE @HFSAPV VARCHAR (10)
DECLARE @HISAP INT
DECLARE @HFSAP INT
--COnversiond e valores hora a int ----------------------------------------------
SET @HISAPV = CONVERT(FLOAT,@HISAP2 )
SET @HFSAPV = CONVERT(FLOAT,@HFSAP2 )
SET @HISAP = CONVERT(INT,@HISAPV)
SET @HFSAP = CONVERT(INT,@HFSAPV)
SET @HISAP2 = ISNULL(@HISAP2,01)
SET @HFSAP2 = ISNULL(@HFSAP2,01)
SET @FISAP = ISNULL(@FISAP,0)
SET @FFSAP = ISNULL(@FFSAP,0)
-- COnversion de hora inicial
IF LEN(@HISAP) = 4
SET @HIFF = CONVERT(Nvarchar,@HISAP)
IF LEN(@HISAP) = 1
SET @HIFF = ('000'+ CONVERT(Nvarchar,@HISAP))
IF LEN(@HISAP) = 2
SET @HIFF = ('00'+ CONVERT(Nvarchar,@HISAP))
IF LEN(@HISAP) = 3
SET @HIFF = ('0'+ CONVERT(Nvarchar,@HISAP))
-- COnversion de hora FINAL
IF LEN(@HFSAP) = 4
SET @HFFF = CONVERT(Nvarchar,@HFSAP)
IF LEN(@HFSAP) = 1
SET @HFFF = ('000'+ CONVERT(Nvarchar,@HFSAP))
IF LEN(@HFSAP) = 2
SET @HFFF = ('00'+ CONVERT(Nvarchar,@HFSAP))
IF LEN(@HFSAP) = 3
SET @HFFF = ('0'+ CONVERT(Nvarchar,@HFSAP))
-- Conversion y calculo de horas ----------------------------------------
IF DATEDIFF(DAY,@FISAP,@FFSAP) >=1
BEGIN
SET @DifDIas = ((DATEDIFF(DAY,@FISAP,@FFSAP)*2400) - @HISAP ) + @HFSAP
IF LEN(@DifDIas) = 1
SET @DifDIas = ('000'+ CONVERT(Nvarchar,@DifDIas))
IF LEN(@DifDIas) = 2
SET @DifDIas = ('00'+ CONVERT(Nvarchar,@DifDIas))
IF LEN(@DifDIas) = 3
SET @DifDIas = ('0'+ CONVERT(Nvarchar,@DifDIas))
IF LEN(@DifDIas) = 4
SET @DifDIas = CONVERT(Nvarchar,@DifDIas)
SET @HP1 = LEFT(@DifDias,2)
IF LEN(@DifDIas) = 5
SET @HP1 = LEFT(@DifDias,3)
IF (@DifDIas > = 100 ) -- SI es mayor a una hora, se le suma el dia completo
BEGIN
SET @HP2 = RIGHT(@DifDias,2)
IF @HP2 > = 61
BEGIN
SET @HP2 = @HP2 -40
SET @Salida = CONVERT(FLOAT,@HP1) + ROUND((CONVERT(FLOAT, @HP2))/60,2 )
END
IF @HP2 <= 60
SET @Salida = CONVERT(FLOAT,@HP1) + ROUND((CONVERT(FLOAT, @HP2))/60,2 )
--Set @Salida = @HP2--ROUND((CONVERT(FLOAT, @HP2))/60,2 )--@DifDIas--HP2
END
IF (@DifDIas < = 99 )-- si es menor de una hora, no toma en cuenta el dia que paso
BEGIN
SET @HP2 = RIGHT(@DifDias,2)
SET @Salida = ROUND((CONVERT(FLOAT, (@HP2-40)))/60,2 )
END
END
IF DATEDIFF(DAY,@FISAP,@FFSAP) = 0 --and DATEDIFF(day,@FISAP,@FFSAP) >= 0
BEGIN
SET @DifDIas = (CONVERT(FLOAT,@HFSAP) - CONVERT(FLOAT,@HISAP))
IF @DifDIas NOT LIKE '%-%'
BEGIN
IF LEN(@DifDIas) = 4
SET @DifDIas = CONVERT(Nvarchar,@DifDIas)
IF LEN(@DifDIas) = 1
SET @DifDIas = ('000'+ CONVERT(Nvarchar,@DifDIas))
IF LEN(@DifDIas) = 2
SET @DifDIas = ('00'+ CONVERT(Nvarchar,@DifDIas))
IF LEN(@DifDIas) = 3
SET @DifDIas = ('0'+ CONVERT(Nvarchar,@DifDIas))
SET @HP1 = LEFT(@DifDias,2)
SET @HP2 = RIGHT(@DifDias,2)
IF @HP2 <= 60
SET @Salida = CONVERT(FLOAT,@HP1)+ ROUND((CONVERT(FLOAT, @HP2))/60,2 )--
IF @HP2 >= 61
BEGIN
SET @HP2 = @HP2 -40
SET @Salida = CONVERT(FLOAT,@HP1) + ROUND((CONVERT(FLOAT, @HP2))/60,2 )
END
END -- endIF @DifDIas NOT LIKE
END
IF DATEDIFF(DAY,@FISAP,@FFSAP) <=-1
BEGIN
SET @DifDIas = ((DATEDIFF(DAY,@FFSAP,@FISAP)*2400) - @HFSAP ) + @HISAP
IF LEN(@DifDIas) = 1
SET @DifDIas = ('000'+ CONVERT(Nvarchar,@DifDIas))
IF LEN(@DifDIas) = 2
SET @DifDIas = ('00'+ CONVERT(Nvarchar,@DifDIas))
IF LEN(@DifDIas) = 3
SET @DifDIas = ('0'+ CONVERT(Nvarchar,@DifDIas))
IF LEN(@DifDIas) = 4
SET @DifDIas = CONVERT(Nvarchar,@DifDIas)
SET @HP1 = LEFT(@DifDias,2)
IF LEN(@DifDIas) = 5
SET @HP1 = LEFT(@DifDias,3)
IF LEN(@DifDIas) = 6
SET @HP1 = LEFT(@DifDias,4)
IF (@DifDIas > = 100 ) -- SI es mayor a una hora, se le suma el dia completo
BEGIN
SET @HP2 = RIGHT(@DifDias,2)
IF @HP2 > = 61
BEGIN
SET @HP2 = @HP2 -40
SET @Salida = (CONVERT(FLOAT,@HP1) + ROUND((CONVERT(FLOAT, @HP2))/60,2 ) )*-1
END
IF @HP2 <= 60
SET @Salida = (CONVERT(FLOAT,@HP1) + ROUND((CONVERT(FLOAT, @HP2))/60,2 ) )*-1
--Set @Salida = @HP2--ROUND((CONVERT(FLOAT, @HP2))/60,2 )--@DifDIas--HP2
END
IF (@DifDIas < = 99 )-- si es menor de una hora, no toma en cuenta el dia que paso
BEGIN
SET @HP2 = RIGHT(@DifDias,2)
SET @Salida = ( ROUND((CONVERT(FLOAT, (@HP2-40)))/60,2 ))*-1
END
END
RETURN @Salida
END