Pregunta

INSERT INTO timecrunch.dbo.intervals (IntervalID, Duration) 
SELECT ixInterval, DATEDIFF(hour, dtStart, dtEnd) FROM fogbugz.dbo.TimeInterval
WHERE dtEnd is not NULL

IntervalID es un int, Duración es un flotador

Estoy tratando de poner todas las duraciones por hora en la columna Duración ... Supongo que aunque sea menos de una hora, utilizará una fracción, ¿por eso puse un flotador?

Ayuda.

PD: se está ejecutando bien, no hay errores, pero después de hacerlo, la tabla de intervalos aún está vacía ... Sé que los datos están en la tabla TimeInterval aunque ...

¿Fue útil?

Solución

No estoy seguro de por qué no se muestran sus datos, pero DATEDIFF no devolverá un flotante. Para obtener un flotador, probablemente querrá usar una unidad de tiempo más pequeña y dividir por el número de unidades por minuto. Ejemplo:

DATEDIFF(second, dtStart, dtEnd) / (3600.0)

Otros consejos

DATEDIFF devuelve un Int del número de límites de parte de fecha cruzados. Espero que obtengas el mínimo de la duración de la cantidad de horas, a menos que haya un problema con la conversión implícita de Int a Float.

También es útil publicar el mensaje de error recibido.

Para insertar fracciones reales de una hora, usa:

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 siempre te devuelve un valor INT, nunca una fracción.

Intente ejecutar SELECT por su cuenta con el bit INSERT, para verificar que su consulta realmente esté devolviendo algunos datos.

Editar: Como han dicho otros, DATEDIFF devuelve un int, no un flotante, pero eso no debería impedir que INSERT inserte algunos datos.

Primero, ¿qué resultados obtienes con solo ejecutar la selección?

En Sql Server DateDiff devuelve un int ( Ver MSDN )

DATEDIFF devolverá un int, no un flotante, ¿es el problema que estás experimentando?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top