lunes, 26 de septiembre de 2011

[INF-272] PROYECTO : Funciones

--****************************
--FUNCIONES*******************
--****************************
--1.- MOSTRAR EL NOMBRE Y EDAD EXACTA DE LOS MESEROS QUE ATENDIERON A MAS PERSONAS EN LA SALA X
ALTER FUNCTION FUNC1(@XSALA INTEGER)
RETURNS VARCHAR(255)
AS
BEGIN
 DECLARE @MESERO VARCHAR (255),@ID_M INTEGER
 IF EXISTS(SELECT * FROM SALAS WHERE ID_SALA=@XSALA) BEGIN
 SET @ID_M =  (SELECT TOP 1 P.ID_MESERO
     FROM PEDIDOS P, MESAS M, SALAS S 
     WHERE P.ID_MESA=M.ID_MESA AND M.ID_SALA=S.ID_SALA 
     AND S.ID_SALA=@XSALA 
     GROUP BY P.ID_MESERO
     ORDER BY COUNT(P.ID_COMANDA) DESC)
 SET @MESERO =(SELECT NOMBRE FROM MESEROS 
     WHERE ID_MESERO=@ID_M)
 END
 ELSE
 BEGIN
  SET @MESERO='NO EXISTE SALA!'
 END
 RETURN @MESERO    
END
PRINT CAST(DBO.FUNC1(2) AS VARCHAR)

--2.- DETERMINAR EL TIEMPO EXACTO DEL CONTRATO MAS ANTIGUO 
ALTER FUNCTION FUNC2 ()
RETURNS VARCHAR(25)
AS
BEGIN
 DECLARE @RESP VARCHAR(25), @FECH DATETIME
 SET @FECH= (SELECT MIN(FECHA_PAGO) FROM CONTRATOS)  
 SET @RESP = DBO.CAL_EDADD(@FECH)
 RETURN @RESP
END
PRINT DBO.FUNC2()
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

No hay comentarios:

Publicar un comentario