none
Select em campo DataHora em registros das últimas 8 horas. RRS feed

  • Pergunta

  • Turma,

    tenho uma tabela onde durante o dia, tudo que é produzido é registrado na tabela tb_Units e tem o campo ProcessDate, gostaria de dar um SELECT no que foi produzido nas últimas 8 horas.

    Exemplo do campo:

    ProcessDate |

    2012-06-06 10:18:52 |

    Estou usando essa linha de comando:

    select * from tb_Units where datediff(HH, getdate(), ProcessDate) < 8

    Mas o resultado não é somente do que foi produzido nas últimas 8 horas.

    Valeu! mCruz

    quarta-feira, 6 de junho de 2012 14:28

Todas as Respostas

  • Olá Marcello,

    Acredito que não está funcionando porque a diferença do getdate() para o ProcessDate vai ser sempre negativa e menor que 8

    Tente desta forma

    select * from tb_Units where datediff(HH, ProcessDate,getdate()) <= 8

    ou
    select * from tb_Units where ProcessDate>= DATEADD(HOUR,-8,GETDATE())


    Att.
    Lukas Baldan


    quarta-feira, 6 de junho de 2012 16:26
  • Lukas, obrigado.

    Só mais uma coisa, quero fazer essa busca somente do dia anterior. Então seriam 3 select por dia.

    8 da manhã, 16 da tarde e 00:00hs, não se preocupe que isso é num JOB que tenho, mas ele roda uma vez por dia e falha muito, então pretendo dividir em 3, esse é o motivo de ser as últimas 8 horas.

    A logica da coisa é a seguinte:

    Pegar tudo que foi produzido no dia anterior, gerar um arquivo e enviar para o cliente. Como a produção é grande, falha muito a criação do arquivo.

    Então quero gerar 3 arquivos por dia, sendo a produção dentro de 8 horas. Então das 24 horas do dia anterior serão gerados 3 arquivos.

    Então, o GETDATE() pode ser GETDATE()-1????

    Valeu!!

    mCruz

    quarta-feira, 6 de junho de 2012 19:13
  • Bem neste caso você pode tentar fixar os horarios

    acredito que fique assim

    select * from tb_Units 
    where ProcessDate >= CAST(CONVERT(VARCHAR(10),DATEADD(Day,-1,GETDATE()),126)  + ' 00:00:00' as DATETIME)
    and ProcessDate < CAST(CONVERT(VARCHAR(10),DATEADD(Day,-1,GETDATE()),126)  + ' 08:00:00' as DATETIME)


    Att.
    Lukas Baldan

    • Sugerido como Resposta Antero Marques sexta-feira, 8 de junho de 2012 19:52
    quarta-feira, 6 de junho de 2012 19:59
  • Lukas,

    muito obrigado, funcionou.

    mCruz

    sexta-feira, 8 de junho de 2012 13:16
  • Marcello,

    se resolveu seu problema favor marcar como resposta


    Att.
    Lukas Baldan

    quarta-feira, 13 de junho de 2012 14:14