Por que não é este INSERT com declaração DATEDIFF direito de trabalhar?
Pergunta
INSERT INTO timecrunch.dbo.intervals (IntervalID, Duration)
SELECT ixInterval, DATEDIFF(hour, dtStart, dtEnd) FROM fogbugz.dbo.TimeInterval
WHERE dtEnd is not NULL
intervalID é um int, a duração é um float
Eu estou tentando colocar todas as durações de hora em hora para a coluna Duração ... Eu supor que mesmo que seja menos de uma hora ele vai usar uma fração que é por isso que eu coloquei um flutuador?
Ajuda.
PS: Está funcionando muito bem sem erros, mas depois de pronto tabela de intervalos ainda está vazio ... Eu sei que os dados estão na tabela TimeInterval embora ...
Solução
Eu não tenho certeza por isso que os seus dados são não aparecendo, mas DATEDIFF não vai retornar um float. Para obter um float, você provavelmente vai querer usar uma unidade menor de tempo e dividir pelo número de suas unidades por minuto. Exemplo:
DATEDIFF(second, dtStart, dtEnd) / (3600.0)
Outras dicas
DATEDIFF retorna um Int do número de limites data parte cruzados. Eu esperaria que você obtenha o andar do número de horas de duração, a menos que haja um problema com a conversão implícita de int para flutuar.
Também é útil para postar a mensagem de erro recebida.
Para inserir fracções reais de uma hora, a utilização:
INSERT INTO timecrunch.dbo.intervals (IntervalID, Duration)
SELECT
ixInterval,
DATEDIFF(mi, dtStart, dtEnd) / 60.0
FROM
fogbugz.dbo.TimeInterval
WHERE
dtEnd is not NULL
DATEDIFF sempre retorna um valor INT, nunca uma fração.
Tente executar o SELECT por conta própria com o bit INSERT, para verificar se a sua consulta está realmente voltando alguns dados.
Edit:. Como já foi dito, DATEDIFF retorna um inteiro, não uma bóia, mas isso não deve impedir o INSERT a partir da inserção de alguns dados
Primeiro que resultados você começa apenas com a execução do seleto?
No SQL Server DateDiff retorna um int ( Veja MSDN )
DATEDIFF irá retornar um int não um float -? É que o problema que você está enfrentando