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.

Preguntas similare

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.

Respuesta Responder a este mensaje
#2 David Ortiz
11/09/2006 - 18:49 | Informe spam
Hola Noldis, gracias por contestar.
Me sigue dando exactamente los mismos errores que al inicio. ¿Qué otra cosa
puede ser?
Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near 'FUNCTION'.
Msg 137, Level 15, State 2, Line 23
Must declare the variable '@FechaInicial'.
Msg 137, Level 15, State 2, Line 27
Must declare the variable '@FechaInicial'.
Msg 137, Level 15, State 2, Line 30
Must declare the variable '@FechaFinal'.
Msg 137, Level 15, State 2, Line 37
Must declare the variable '@FechaFinal'.
Msg 137, Level 15, State 2, Line 44
Must declare the variable '@FechaFinal'.
Msg 137, Level 15, State 2, Line 47
Must declare the variable '@FechaInicial'.
Msg 137, Level 15, State 2, Line 52
Must declare the variable '@FechaFinal'.
Msg 137, Level 15, State 2, Line 59
Must declare the variable '@FechaFinal'.
Msg 178, Level 15, State 1, Line 88
A RETURN statement with a return value cannot be used in this context.

Saludos!

"Noldis Chumacero" wrote in message
news:%23$
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.





Respuesta Responder a este mensaje
#3 Alejandro Mesa
11/09/2006 - 20:43 | Informe spam
David,

Nos puedes comentar que tratas de hacer?


AMB

"David Ortiz" wrote:

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.



Respuesta Responder a este mensaje
#4 David Ortiz
11/09/2006 - 21:49 | Informe spam
Hola Alejandro,
Pues, obviamente una función a la cual le pase la fecha inicial y la fecha
final y me devuelva el resultado del tiempo transcurrido entre dichas
fechas.

Saludos.

"Alejandro Mesa" wrote in message
news:
David,

Nos puedes comentar que tratas de hacer?


AMB

"David Ortiz" wrote:

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.



Respuesta Responder a este mensaje
#5 DNC
12/09/2006 - 03:30 | Informe spam
Recuerda que las funciones fueron introducidas en mssql 2000.


Cordiales Saludos! ,
Diego.-

<!--Enviar Email: Pega esto en un .htm -->
<!-- INICIO -->
<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#100;&#99;&#111;
&#110;&#116;&#105;&#110;&#64;&#65;&#114;&#103;&#101;&#110;&#116;
&#105;&#110;&#97;&#46;&#99;&#111;&#109;">
Diego N. Contin</a>
<!-- FIN -->
Uso del Foro
http://www.mvp-access.com/rubenvigon/foro/

Este mensaje se proporciona TAL CUAL.
Sin ningun derecho o garantia

The documentation is provided to you "as is" without warranty of any kind.
The entire risk
usage and all it's consequences including data loss and hardware damage are
with you.

"En cuestiones de cultura y de saber, solo se pierde lo que se guarda; solo
se gana lo que se da". Antonio Machado

"Tres cosas que son el deber de todos: escuchar humildemente, responder
discretamente y juzgar bondadosamente."
Tríada celta.

"I wish I'd known that before I started writing all this code."
"David Ortiz" <rortiz-ARROBA-swdeca.com> escribió en el mensaje
news:
Hola Noldis, gracias por contestar.
Me sigue dando exactamente los mismos errores que al inicio. ¿Qué otra
cosa puede ser?
Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near 'FUNCTION'.
Msg 137, Level 15, State 2, Line 23
Must declare the variable '@FechaInicial'.
Msg 137, Level 15, State 2, Line 27
Must declare the variable '@FechaInicial'.
Msg 137, Level 15, State 2, Line 30
Must declare the variable '@FechaFinal'.
Msg 137, Level 15, State 2, Line 37
Must declare the variable '@FechaFinal'.
Msg 137, Level 15, State 2, Line 44
Must declare the variable '@FechaFinal'.
Msg 137, Level 15, State 2, Line 47
Must declare the variable '@FechaInicial'.
Msg 137, Level 15, State 2, Line 52
Must declare the variable '@FechaFinal'.
Msg 137, Level 15, State 2, Line 59
Must declare the variable '@FechaFinal'.
Msg 178, Level 15, State 1, Line 88
A RETURN statement with a return value cannot be used in this context.

Saludos!

"Noldis Chumacero" wrote in message
news:%23$
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.









Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida