Crear una función definida por el usuario

11/09/2006 - 17:29 por David Ortiz | Informe spam
Hola a todos, espero que me puedan ayudar (muchos ojos ven mejor que dos),
quiero crear la siguiente función, pero me devuelve una serie de errores. He
revisado la ayuda y también otros ejemplos de creación de funciones y no doy
en que me estoy quivocando.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION dbo.CalculaTiempo(@FechaInicial AS datetime,@FechaFinal AS
datetime)
RETURNS varchar(50)
AS
BEGIN
DECLARE @Year int
DECLARE @Month int
DECLARE @Day int
DECLARE @Hour int
DECLARE @Minute int
DECLARE @Second int
DECLARE @UltimateDay int
DECLARE @Resultado varchar(50)

SET @Resultado = ''
SET @Year = 0
SET @Month = 0
SET @Day = 0
SET @Hour = 0
SET @Minute = 0
SET @UltimateDay = 0

IF @FechaInicial > @FechaFinal
BEGIN
SET @Resultado = 'Fecha Inicial mayor que Fecha Final'
END
IF @FechaInicial <= @FechaFinal
BEGIN

SET @Minute = DatePart(mi,@FechaFinal) - DatePart(mi,@FechaInicial)
IF @Minute < 0
BEGIN
SET @Hour = @Hour - 1
SET @Minute = @Minute + 60
END

SET @Hour = DatePart(hh,@FechaFinal) - DatePart(hh,@FechaInicial) + @Hour
IF @Hour < 0
BEGIN
SET @Day = @Day - 1
SET @Hour = @Hour + 24
END

SET @Day = DatePart(dd,@FechaFinal) - DatePart(dd,@FechaInicial) + @Day
IF @Day < 0
BEGIN
SET @UltimateDay = Day(@FechaInicial)
SET @Month = @Month - 1
SET @Day = @Day + @UltimateDay
END

SET @Month = DatePart(mm,@FechaFinal) - DatePart(mm,@FechaInicial) +
@Month
IF @Month < 0
BEGIN
SET @Year = @Year - 1
SET @Month = @Month + 12
END

SET @Year = DatePart(yy,@FechaFinal) - DatePart(yy,@FechaInicial) + @Year

IF @Minute > 0
BEGIN
SET @Resultado = @Minute + ' Minutos'
END

IF @Hour > 0
BEGIN
SET @Resultado = @Hour & ' Horas, ' + @Resultado
END

IF @Day > 0
BEGIN
SET @Resultado = @Day & ' Días, ' + @Resultado
END

IF @Month > 0
BEGIN
SET @Resultado = @Month & ' Meses, ' + @Resultado
END

IF @Year > 0
BEGIN
SET @Resultado = @Year & ' Años, ' + @Resultado
END
END

RETURN @Resultado
END
GO

Saludos,

David Ortiz
El Salvador, C.A.
 

Leer las respuestas

#1 Noldis Chumacero
11/09/2006 - 18:45 | Informe spam
David,

Tienes problemas de conversión, aqui te envío la versión que me funciona con
los cambios

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION dbo.CalculaTiempo(@FechaInicial AS datetime,@FechaFinal AS
datetime)
RETURNS varchar(50)
AS
BEGIN
DECLARE @Year int
DECLARE @Month int
DECLARE @Day int
DECLARE @Hour int
DECLARE @Minute int
DECLARE @Second int
DECLARE @UltimateDay int
DECLARE @Resultado varchar(50)

SET @Resultado = ''
SET @Year = 0
SET @Month = 0
SET @Day = 0
SET @Hour = 0
SET @Minute = 0
SET @UltimateDay = 0

IF @FechaInicial > @FechaFinal
BEGIN
SET @Resultado = 'Fecha Inicial mayor que Fecha Final'
END
IF @FechaInicial <= @FechaFinal
BEGIN

SET @Minute = DatePart(mi,@FechaFinal) - DatePart(mi,@FechaInicial)
IF @Minute < 0
BEGIN
SET @Hour = @Hour - 1
SET @Minute = @Minute + 60
END

SET @Hour = DatePart(hh,@FechaFinal) - DatePart(hh,@FechaInicial) + @Hour
IF @Hour < 0
BEGIN
SET @Day = @Day - 1
SET @Hour = @Hour + 24
END

SET @Day = DatePart(dd,@FechaFinal) - DatePart(dd,@FechaInicial) + @Day
IF @Day < 0
BEGIN
SET @UltimateDay = Day(@FechaInicial)
SET @Month = @Month - 1
SET @Day = @Day + @UltimateDay
END

SET @Month = DatePart(mm,@FechaFinal) - DatePart(mm,@FechaInicial) +
@Month
IF @Month < 0
BEGIN
SET @Year = @Year - 1
SET @Month = @Month + 12
END

SET @Year = DatePart(yy,@FechaFinal) - DatePart(yy,@FechaInicial) + @Year

IF @Minute > 0
BEGIN
SET @Resultado = CAST(@Minute AS VARCHAR(10)) + ' Minutos'
END

IF @Hour > 0
BEGIN
SET @Resultado = CAST(@Hour AS VARCHAR(10)) + ' Horas, ' + @Resultado
END

IF @Day > 0
BEGIN
SET @Resultado = CAST(@Day AS VARCHAR(10)) + ' Días, ' + @Resultado
END

IF @Month > 0
BEGIN
SET @Resultado = CAST(@Month AS VARCHAR(10))+ ' Meses, ' + @Resultado
END

IF @Year > 0
BEGIN
SET @Resultado = CAST(@Year AS VARCHAR(10)) + ' Años, ' + @Resultado
END
END

RETURN @Resultado
END
GO

SELECT [test_db].[dbo].[CalculaTiempo]('1/2/2006', GETDATE())


Saludos
Ing. Noldis Chumacero Ch.
Dpto. Sistemas, AeroSur.
Santa Cruz de la Sierra - Bolivia

"David Ortiz" <rortiz-ARROBA-swdeca.com> escribió en el mensaje
news:
Hola a todos, espero que me puedan ayudar (muchos ojos ven mejor que dos),
quiero crear la siguiente función, pero me devuelve una serie de errores.
He revisado la ayuda y también otros ejemplos de creación de funciones y
no doy en que me estoy quivocando.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION dbo.CalculaTiempo(@FechaInicial AS datetime,@FechaFinal AS
datetime)
RETURNS varchar(50)
AS
BEGIN
DECLARE @Year int
DECLARE @Month int
DECLARE @Day int
DECLARE @Hour int
DECLARE @Minute int
DECLARE @Second int
DECLARE @UltimateDay int
DECLARE @Resultado varchar(50)

SET @Resultado = ''
SET @Year = 0
SET @Month = 0
SET @Day = 0
SET @Hour = 0
SET @Minute = 0
SET @UltimateDay = 0

IF @FechaInicial > @FechaFinal
BEGIN
SET @Resultado = 'Fecha Inicial mayor que Fecha Final'
END
IF @FechaInicial <= @FechaFinal
BEGIN

SET @Minute = DatePart(mi,@FechaFinal) - DatePart(mi,@FechaInicial)
IF @Minute < 0
BEGIN
SET @Hour = @Hour - 1
SET @Minute = @Minute + 60
END

SET @Hour = DatePart(hh,@FechaFinal) - DatePart(hh,@FechaInicial) +
@Hour
IF @Hour < 0
BEGIN
SET @Day = @Day - 1
SET @Hour = @Hour + 24
END

SET @Day = DatePart(dd,@FechaFinal) - DatePart(dd,@FechaInicial) + @Day
IF @Day < 0
BEGIN
SET @UltimateDay = Day(@FechaInicial)
SET @Month = @Month - 1
SET @Day = @Day + @UltimateDay
END

SET @Month = DatePart(mm,@FechaFinal) - DatePart(mm,@FechaInicial) +
@Month
IF @Month < 0
BEGIN
SET @Year = @Year - 1
SET @Month = @Month + 12
END

SET @Year = DatePart(yy,@FechaFinal) - DatePart(yy,@FechaInicial) +
@Year

IF @Minute > 0
BEGIN
SET @Resultado = @Minute + ' Minutos'
END

IF @Hour > 0
BEGIN
SET @Resultado = @Hour & ' Horas, ' + @Resultado
END

IF @Day > 0
BEGIN
SET @Resultado = @Day & ' Días, ' + @Resultado
END

IF @Month > 0
BEGIN
SET @Resultado = @Month & ' Meses, ' + @Resultado
END

IF @Year > 0
BEGIN
SET @Resultado = @Year & ' Años, ' + @Resultado
END
END

RETURN @Resultado
END
GO

Saludos,

David Ortiz
El Salvador, C.A.

Preguntas similares