--******************************************
--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