Warum ist das nicht INSERT mit DATEDIFF Aussage richtig funktioniert?
Frage
INSERT INTO timecrunch.dbo.intervals (IntervalID, Duration)
SELECT ixInterval, DATEDIFF(hour, dtStart, dtEnd) FROM fogbugz.dbo.TimeInterval
WHERE dtEnd is not NULL
intervalID ist ein int, Laufzeit ist ein Schwimmer
Ich versuche, alle Stundendauern in der Spalte Dauer zu setzen ... Ich gehe davon aus, dass selbst wenn es weniger als eine Stunde ist, wird es einen Bruchteil verwenden, weshalb ich einen Schwimmer setzen?
Hilfe.
PS: Es ist in Ordnung keine Fehler läuft, aber nachdem er die Intervalle Tabelle getan ist noch leer ... Ich weiß, dass die Daten in der Tabelle TimeInterval ist aber ...
Lösung
Ich bin mir nicht sicher, warum Ihre Daten nicht nach oben zeigt, aber DATEDIFF ist kein Schwimmer geht zurück. Um einen Schwimmer zu bekommen, werden Sie wahrscheinlich eine kleinere Einheit von Zeit und Dividieren durch die Anzahl Ihrer Einheiten pro Minute verwendet werden sollen. Beispiel:
DATEDIFF(second, dtStart, dtEnd) / (3600.0)
Andere Tipps
DATEDIFF ein Int der Anzahl der Datumsteil Grenzen überschritten. Ich würde erwarten, dass Sie den Boden der Anzahl der Stunden Dauer erhalten, es sei denn, es ein Problem mit implizite Konvertierung von Int ist zu schweben.
Es ist auch hilfreich, die Fehlermeldung schreiben erhalten.
Zum tatsächlichen Fraktionen einer Stunde Verwendung einfügen:
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 immer gibt Ihnen einen INT-Wert, nie einen Bruchteil.
Versuchen Sie, die SELECT auf seine eigene mit der INSERT-Bit ausgeführt wird, um zu überprüfen, dass Ihre Abfrage tatsächlich einige Daten zurückgibt.
Edit:. Wie andere gesagt haben, DATEDIFF einen int zurückgibt, nicht ein Schwimmer, aber das sollte die INSERT aus Einfügen einige Daten nicht verhindern
Zuerst Welche Ergebnisse erhalten Sie nur vom Laufen der wählen?
In SQL Server DateDiff gibt einen int ( Siehe MSDN )
DATEDIFF wird ein int kein Schwimmer zurückkehren - ist, dass das Problem bei Ihnen auftritt