DATEDIFFステートメントを使用したこのINSERTが正しく機能しないのはなぜですか?
質問
INSERT INTO timecrunch.dbo.intervals (IntervalID, Duration)
SELECT ixInterval, DATEDIFF(hour, dtStart, dtEnd) FROM fogbugz.dbo.TimeInterval
WHERE dtEnd is not NULL
IntervalIDはint、Durationはfloatです
すべての時間間隔をDuration列に入れようとしています... 1時間未満であっても、フロートを入れる理由は分数を使用すると思いますか?
ヘルプ。
PS:エラーなしで正常に実行されていますが、実行後も間隔テーブルはまだ空です...データはTimeIntervalテーブルにありますが...
解決
データが表示されない理由はわかりませんが、DATEDIFFはfloatを返しません。フロートを取得するには、おそらくより短い時間単位を使用し、1分あたりのユニット数で除算する必要があります。例:
DATEDIFF(second, dtStart, dtEnd) / (3600.0)
他のヒント
DATEDIFFは、交差した日付部分の境界の数のIntを返します。 IntからFloatへの暗黙的な変換に問題がない限り、時間数の下限を取得することを期待します。
受信したエラーメッセージを投稿することも役立ちます。
実際の1時間の端数を挿入するには、次を使用します。
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は常に分数ではなくINT値を返します。
クエリが実際にデータを返していることを確認するために、INSERTビットでSELECTを単独で実行してみてください。
編集:他の人が言ったように、DATEDIFFはフロートではなくintを返しますが、INSERTがデータを挿入することを防ぐべきではありません。
まず、selectを実行するだけでどのような結果が得られますか?
SQL Serverでは、DateDiffはintを返します ( MSDNを参照)
DATEDIFFは、floatではなくintを返します-発生している問題ですか?
所属していません StackOverflow