Inquiridor
Select em campo DataHora em registros das últimas 8 horas.

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
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
ouselect * from tb_Units where ProcessDate>= DATEADD(HOUR,-8,GETDATE())
Att.
Lukas Baldan- Editado Lukas de Castro Ruocco Baldan quarta-feira, 6 de junho de 2012 16:28
-
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
-
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
-
-