| ■No96346 (夜叉姫 さん) に返信 > 分類:[.NET 全般] > SQLServerにて
であれば、[.NET 全般]ではなく、[データベース全般]が適切かと。 あるいは [その他の言語] とか。
> DECLARE @STIME DATETIME = '2020-11-11 20:00:00.000'; > DECLARE @ETIME DATETIME = '2020-11-13 08:00:00.000'; > --DECLARE @ETIME DATETIME = '2020-12-25 08:00:00.000'; > DECLARE @DFT INT = DATEDIFF(MILLISECOND, @STIME, @ETIME) / 3;
MILLISECOND を指定されていますが、DATETIME 型の精度は 1/1000 秒ではありません。 秒未満の小数点以下(3 桁目まで)は、「.xx0」「.003」「.007」のいずれかなのでご注意を。
ミリ秒精度を求めるなら、DATETIME2 型が使えます。(こちらは 100 ナノ秒精度)
…それはさておき。
DATEDIFF は INT 精度なので、 MILLISECOND 指定で求められる範囲は 24日20時間31分23.647 が上限です。
これを SECOND 指定に切り替えれば、68年分ぐらいまで耐えられるでしょう。
とはいえ、今回欲しいのは「ミリ秒」の差なのですよね。
もしも MILLISECOND での指定が必要であれば、 DECLARE @DFT BIGINT = DATEDIFF_BIG(MILLISECOND, @STIME, @ETIME); という方法はあります。
ただし、対応する DATEADD_BIG 関数があるわけではありませんので、 その点は注意が必要です。(DATEADD は INT 精度)
本当にミリ秒指定での算出が必要なら、処理を分けて、 「日数差」と「日未満の時刻差」を別々に演算してみてください。 |