none
Resolví la consulta anterior pero tiene un detalle lo expongo para ver si me pueden ayudar ? RRS feed

  • Pregunta

  • Resolví el tema de la consulta anterior pero expongo como lo hice pero solo tengo un detalle que no he podido reparar.

    Create FUNCTION [dbo].[fn_MinuteIntervals2](@IdTipoDiaUser tinyint, @IdTurnoUser tinyint,@IdContratoUser tinyint,@startDate SMALLDATETIME, @endDate SMALLDATETIME, @interval INT = 1)
    RETURNS @returnDates TABLE
        (
    	  [Horario] SMALLDATETIME PRIMARY KEY NOT NULL,
    	  [IdTipoDia] tinyint, 
    	  [IdTurno] tinyint, 
    	  [IdContrato] tinyint
        )
    AS
    BEGIN
       DECLARE @counter SMALLDATETIME
       DECLARE @IdTipoDia tinyint, @IdTurno tinyint, @IdContrato tinyint
       SET @counter = @startDate
       WHILE @counter <= @endDate
         BEGIN
    	    --INSERT INTO @returnDates VALUES (@counter)
    	    --SET @counter = DATEADD(n, @interval, @counter)
            INSERT INTO @returnDates VALUES (@counter, @IdTipoDia, @IdTurno, @IdContrato)
    		SELECT @counter = DATEADD(n, @interval, @counter), @IdTipoDia = @IdTipoDiaUser, @IdTurno = @IdTurnoUser, @IdContrato = @IdContratoUser
         END
        RETURN
    END


    Declare @tbHorariosRango AS Table(Orden Tinyint, IdTipoDia tinyint, IdTurno tinyint, IdContrato tinyint, Minutos tinyint, HoraDesde Time(0), HoraHasta Time(0))
    
    Declare @Count tinyint, @CantTotal tinyint
    Declare @IdTipoDia tinyint, @IdTurno tinyint, @IdContrato tinyint, @Minutos tinyint, @HoraDesde Time(0), @HoraHasta Time(0),@HoraDesdeAux SMALLDATETIME, @HoraHastaAux SMALLDATETIME  
    
    Insert Into @tbHorariosRango values(1,1,1,1,5,'22:00:00','02:00:00')
    Insert Into @tbHorariosRango values(2,1,1,2,5,'07:00:00','08:00:00')
    Insert Into @tbHorariosRango values(3,1,2,1,10,'05:00:00','06:59:59')
    
    WHILE @Count <= @CantTotal
     BEGIN
         SELECT  @IdTipoDia = IdTipoDia,  @IdTurno = IdTurno, @IdContrato = IdContrato, @Minutos = Minutos, @HoraDesde = HoraDesde, @HoraHasta = HoraHasta
       FROM    @tbHorariosRango
       WHERE   Orden = @Count
    
       IF DATEPART(HOUR,@HoraDesde) >= 0 And DATEPART(HOUR,@HoraDesde) <= 3
          BEGIN
    	     SET @HoraDesdeAux = CONVERT(SMALLDATETIME,CONCAT(CONVERT(varchar(10),DATEADD(DAY,1,GETDATE()),103),' ',@HoraDesde))
    	     --SET @HoraDesde = DATEADD(DAY,1,@HoraDesde) 
    	  END
       ELSE
          BEGIN
    	     SET @HoraDesdeAux = CONVERT(SMALLDATETIME,CONCAT(CONVERT(varchar(10),GETDATE(),103),' ',@HoraDesde))
    	  END
    
       IF DATEPART(HOUR,@HoraHasta) >= 0 And DATEPART(HOUR,@HoraHasta) <= 3
          BEGIN
    	     SET @HoraHastaAux = CONVERT(SMALLDATETIME,CONCAT(CONVERT(varchar(10),DATEADD(DAY,1,GETDATE()),103),' ',@HoraHasta))
    	  ENd
        ELSE
    	  BEGIN
    	     SET @HoraHastaAux = CONVERT(SMALLDATETIME,CONCAT(CONVERT(varchar(10),GETDATE(),103),' ',@HoraHasta))
    	  ENd
    
       SELECT [IdTipoDia],[IdTurno],[IdContrato],CONVERT(varchar(8),Horario,108) AS [Horario] 
       FROM [dbo].[fn_MinuteIntervals2](@IdTipoDia,@IdTurno,@IdContrato,@HoraDesdeAux,@HoraHastaAux,@Minutos)
    
       SET @Count += 1
     END
    

    Pd: El problema no se porque me trae la primera fila vacía 

    Saludos cordiales


    Ale Zidane

    martes, 21 de agosto de 2018 16:53

Respuestas

  • Hola ale Zidane:

    Un par de pequeñas anotaciones para tu función.

    alter FUNCTION [dbo].[fn_MinuteIntervals2](@IdTipoDiaUser tinyint, @IdTurnoUser tinyint,@IdContratoUser tinyint,
    @startDate SMALLDATETIME, @endDate SMALLDATETIME, @interval INT = 1)
    RETURNS @returnDates TABLE
        (
    	  [Horario] SMALLDATETIME,
    	  [IdTipoDia] tinyint, 
    	  [IdTurno] tinyint, 
    	  [IdContrato] tinyint
        )
    AS
    BEGIN
       DECLARE @counter SMALLDATETIME
     --  DECLARE @IdTipoDia tinyint, @IdTurno tinyint, @IdContrato tinyint
       /* si los valores son los de los parametros, no hace falta variables dentro de la función para realizar la sentencia insert.
       Si los necesitas por alguna causística, que yo no he visto en el código, tienes que inicializarlos antes de la sentencia insert.
       set @idTipoDia = @idTipoDiaUser */
       SET @counter = @startDate
       WHILE @counter <= @endDate
         BEGIN
    	    --INSERT INTO @returnDates VALUES (@counter)
    	    --SET @counter = DATEADD(n, @interval, @counter)
            INSERT INTO @returnDates VALUES (@counter, @IdTipoDiaUser, @IdTurnoUser, @IdContratoUser)
    		SELECT @counter = DATEADD(n, @interval, @counter)--, @IdTipoDia = @IdTipoDiaUser, @IdTurno = @IdTurnoUser, @IdContrato = @IdContratoUser
         END
        RETURN
    END

    Espero te sirva.

    Eso soluciona lo de la primera fila.

    Un saludo

    miércoles, 22 de agosto de 2018 5:31