lunes, 12 de septiembre de 2011

[INF-272] PROYECTO : Funciones FECHA - CADENAS - MATEMÁTICAS

--******************************************
--FUNCIONES DE FECHA Y HORA*****************
--******************************************

--1.- DETERMINAR EL NUMERO DE DIA (1-365) EN EL QUE ESTAMOS HOY
CREATE FUNCTION NRO_DIA()
RETURNS INTEGER
AS BEGIN
    DECLARE @DIAS INTEGER
    SET @DIAS=DATEDIFF(d,'1/1/2011',GETDATE())
    RETURN(@DIAS)
END
PRINT 'nRO DE DIA: '+ CAST (DBO.NRO_DIA() AS VARCHAR)

--2.- CONTAR LA CANTIDAD DE DIAS QUE SEPARA UNA FECHA X DE OTRA FECHA Y
CREATE FUNCTION NRO_DIAS_FECHAS(@X DATETIME, @Y DATETIME)
RETURNS INTEGER
AS BEGIN
    DECLARE @DIAS INTEGER
    SET @DIAS=DATEDIFF(d,@X,@Y)
    RETURN(@DIAS)
END
PRINT 'nRO DE DIAS: ' + CAST (DBO.NRO_DIAS_FECHAS('07-26/1997',getdate()) AS VARCHAR)

--3.- AGREGAR 'X' DIAS 'Y' MESES Y 'Z' AÑOS A LA FWECHA ACTUAL
CREATE FUNCTION ADICIONA_FECHA(@XD INTEGER, @YM INTEGER, @ZA INTEGER)
RETURNS DATETIME
AS
BEGIN
    DECLARE @FECHA_ACTUAL DATETIME
    SET @FECHA_ACTUAL=GETDATE()
    SET @FECHA_ACTUAL=DATEADD(YEAR,@ZA,@FECHA_ACTUAL)
    SET @FECHA_ACTUAL=DATEADD(MONTH,@YM,@FECHA_ACTUAL)
    SET @FECHA_ACTUAL=DATEADD(DAY,@XD,@FECHA_ACTUAL)
    RETURN @FECHA_ACTUAL
END
PRINT DBO.ADICIONA_FECHA(1,2,3)

--4.- MOSTRAR UN MANSAJE SI NOS ENCONTAMOS EN UN DIA PAR O IMPAR
CREATE FUNCTION VERIFICA_FECHA()
RETURNS VARCHAR(25)
AS
BEGIN
    DECLARE @DIA INTEGER
    DECLARE @RES VARCHAR(25)
    SET @DIA=DAY(GETDATE())
    IF (@DIA %2=0)
        SET @RES='Dia PAR'
    ELSE
        SET @RES='Dia IMPAR'
    RETURN @RES
END
PRINT DBO.VERIFICA_FECHA()

--5.- CALCULAR LA EDAD INTRUDCIENDO LA FECHA DE NACIMIENTO
CREATE FUNCTION CAL_EDADD(@FECHA_NAC DATETIME)
RETURNS VARCHAR(25)
AS
BEGIN
    DECLARE @AUX_FECHA DATETIME
    DECLARE @DIA INTEGER, @MES INTEGER, @ANIO INTEGER
    DECLARE @EDAD VARCHAR(25)
    SET @AUX_FECHA = @FECHA_NAC
    SET @ANIO = DATEDIFF(yy, @AUX_FECHA, GETDATE()) - CASE WHEN MONTH(@FECHA_NAC) > MONTH(GETDATE()) THEN 1 ELSE 0 END
    SET @AUX_FECHA = DATEADD(yy, @ANIO, @AUX_FECHA)
    SET @MES = DATEDIFF(m, @AUX_FECHA, GETDATE()) - CASE WHEN DAY(@FECHA_NAC) > DAY(GETDATE()) THEN 1 ELSE 0 END
    SET @AUX_FECHA = DATEADD(m, @MES, @AUX_FECHA)
    SET @DIA = DATEDIFF(d, @AUX_FECHA, GETDATE())
    SET @EDAD='AÑOS:'+ CAST(@ANIO AS VARCHAR)+' MESES:'+ CAST(@MES AS VARCHAR)+ ' DIAS:'+ CAST(@DIA AS VARCHAR)
    RETURN (@EDAD)
END
PRINT DBO.CAL_EDADD('6/07/1997')

--******************************************
--FUNCIONES MATEMATICAS*********************
--******************************************
--1.- GENERAR FIBONACCI

CREATE PROCEDURE FIBO(@N INTEGER)
AS
BEGIN   
    DECLARE @F INTEGER, @A INTEGER, @B INTEGER,  @C INTEGER
    SET @A=-1
    SET @B=1
    SET @C=1
    WHILE  (@C<=@N)
    BEGIN
        SET @F=@A+@B
        PRINT @F
        SET @A=@B
        SET @B=@F
        SET @C=@C+1
    END
END
EXEC FIBO 15

--2.- DETERMINAR LA SUPERFICIE Y EL VOLUMEN DE UN CUBO
ALTER PROCEDURE CUBO (@A NUMERIC(10,2))
AS
BEGIN
    DECLARE @SUPERFICIE NUMERIC(10,2),@VOLUMEN NUMERIC(10,2) 
    SET @SUPERFICIE= 6* POWER(@A,2)     
    SET @VOLUMEN= POWER(@A,3)     
    PRINT 'Superficie: '+ CAST (@SUPERFICIE AS VARCHAR(20))
    PRINT 'Volumen: ' + CAST (@VOLUMEN AS VARCHAR (20))
END
EXEC CUBO 4.00

--3.- INVERTIR UN NUMERO
ALTER FUNCTION INVERTIR(@n INTEGER)
RETURNS INTEGER
BEGIN
    DECLARE @d integer
    DECLARE @co integer
    DECLARE @nu integer
    SET @co=@n
    set @nu=0
    WHILE(@co<>0)
    BEGIN
        SET @d=@co%10
        SET @nu=@nu*10+@d
        SET @co=@co/10
    END
    RETURN @nu
END
print dbo.invertir(12345)

--4.- CONTAR EL NUMERO DE DIGITOS DE UN NUMERO
ALTER FUNCTION NRODIGITOS(@N INTEGER)
RETURNS INTEGER
AS
BEGIN
    DECLARE @NDIG INTEGER
    SET @NDIG= LOG(@N)/LOG(10) +1
    RETURN @NDIG
END
PRINT DBO.NRODIGITOS(426114)

--5.- VERIFICAR SI UN NUMERO ES PRIMO
CREATE FUNCTION VERIPRIMO(@n integer)
RETURNS INTEGER
BEGIN
    DECLARE @i integer
    DECLARE @sw integer
    DECLARE @c integer
    SET @i=2
    SET @sw=0
    SET @c=0
    WHILE(@i<=@n)
    BEGIN
        IF(@n%@i=0)
        BEGIN
            SET @c=@c+1   
        END
        SET @i=@i+1
    END
    RETURN @c
END

if(dbo.VERIPRIMO(43)=1)
begin
    print('Si es Primo')
end
else
begin
    print('No es primo')
end

--******************************************
--FUNCIONES DE CADENA **********************
--******************************************

--1.-  CONVERTIR EL PRIMER CARACTER MAYUSCULA Y EL RESTO A MINUSCULA
ALTER FUNCTION TIPOTITULO (@A VARCHAR (255))
RETURNS VARCHAR(255)
AS
BEGIN
    DECLARE @PAL VARCHAR(255)
    SET @PAL =UPPER(LEFT(@A,1))+ LOWER(SUBSTRING(@A,2,LEN(@A)))
    RETURN @PAL
END
PRINT DBO.TIPOTITULO('HOLA mUNdo')

--2.- MOSTRAR EL EQUIVALENTE EN ASCCI DE CADA CARACTER DE UN PALABRA
ALTER PROCEDURE PAL_ASCII (@X VARCHAR(255))
AS
BEGIN
    DECLARE @I INTEGER
    SET @I=1
    WHILE(@I<=LEN(@X))
    BEGIN
        PRINT SUBSTRING(@X,@I,1)+'->'+CAST (ASCII(SUBSTRING(@X,@I,1)) AS VARCHAR)
        SET @I=@I+1   
    END
END
EXEC PAL_ASCII 'gONZALO OsCo'

--3.- ELIMNAR LOS ESPACIOS EN BLANCO DE UNA CADENA
CREATE FUNCTION ELI_ESPACIO(@X VARCHAR(255))
RETURNS VARCHAR(255)
AS
BEGIN
    RETURN RTRIM(LTRIM(@X))
END
PRINT DBO.ELI_ESPACIO(' hOLA mUNDO ')

--4.- REMPLAZAR LOS ESPACIOS EN BLANCO POR '_'
CREATE FUNCTION REM_ESPACIO(@X VARCHAR(255))
RETURNS VARCHAR(255)
AS
BEGIN
    SET @X =REPLACE(@X,' ','_')
    RETURN (@X)
END 
PRINT DBO.REM_ESPACIO(' goNZALO oSOC hERNADEZ')

--5.- CONVERTIR A MINUSCULA O MAYUSCULA UNA PALABRA
ALTER FUNCTION CON_CADENA (@X VARCHAR (255),@SW INTEGER)
RETURNS VARCHAR(255)
AS
BEGIN
    IF (@SW=1)
        SET @X=UPPER(@X)
    ELSE
        SET @X=LOWER(@X)
    RETURN @X   
END
PRINT DBO.CON_CADENA('GonZAlo',2)


No hay comentarios:

Publicar un comentario