none
Select para gerar intervalos de horas RRS feed

  • Pergunta

  • Preciso fazer o seguinte. Passo um intervalo de horas, tipo: 8:00 17:00, logo dentro desse intervalo preciso fazer um select que me traga dentro desse intervalo, valores de 45min, começando às 8 e indo até às 18. Tipo,

    8:00

    8:45

    9:30

    10:15

    ....

    até 18. Quanto ao intervalo de 45min, pode ser qualquer intervalo, qualquer valor, desde que se respeite o intervalo master. 

    A finalidade é criar uma agenda de horários

    sexta-feira, 24 de maio de 2013 15:08

Respostas

  • Boa tarde,

    pnet, experimente fazer um teste com o script abaixo:

    declare @HoraIni time;
    declare @HoraFim time;
    declare @Intervalo integer;
    
    set @HoraIni = '8:00';
    set @HoraFim = '17:00';
    set @Intervalo = 45;
    
    with CTE_H as
    (
        select @HoraIni as Horario
        
        union all
        
        select DATEADD(MINUTE, @Intervalo, Horario)
        from CTE_H
        where DATEADD(MINUTE, @Intervalo, Horario) <= @HoraFim
    )
    
    select * from CTE_H

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 24 de maio de 2013 17:32

Todas as Respostas

  • pnet,

    Utilize o comando DATEADD dentro de um While.

    SELECT DATEADD(MINUTE,[MINUTOS],[DATA])


    sexta-feira, 24 de maio de 2013 17:28
  • Boa tarde,

    pnet, experimente fazer um teste com o script abaixo:

    declare @HoraIni time;
    declare @HoraFim time;
    declare @Intervalo integer;
    
    set @HoraIni = '8:00';
    set @HoraFim = '17:00';
    set @Intervalo = 45;
    
    with CTE_H as
    (
        select @HoraIni as Horario
        
        union all
        
        select DATEADD(MINUTE, @Intervalo, Horario)
        from CTE_H
        where DATEADD(MINUTE, @Intervalo, Horario) <= @HoraFim
    )
    
    select * from CTE_H

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 24 de maio de 2013 17:32
  • pnet,

    Utilize o comando DATEADD dentro de um While.

    SELECT DATEADD(MINUTE,[MINUTOS],[DATA])


    Da uma olhada nesse exemplo:

    DECLARE @DATA_INICIAL DATETIME, @DATA_FINAL DATETIME, @INTERVALO INT
    SET @DATA_INICIAL = '2013-05-24 14:30'
    SET @DATA_FINAL = '2013-05-24 22:00'
    SET @INTERVALO = 45
    
    WHILE @INTERVALO <= (SELECT DATEDIFF(MINUTE,@DATA_INICIAL,@DATA_FINAL)) BEGIN
    
    	SELECT DATEADD(MINUTE,@INTERVALO,@DATA_INICIAL)
    	SET @INTERVALO = @INTERVALO + 45
    END
    

    sexta-feira, 24 de maio de 2013 17:38
  • Deleted
    sexta-feira, 24 de maio de 2013 23:05