C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■96351 / 1階層)  時間の差をミリ秒で求める
□投稿者/ 魔界の仮面弁士 (2910回)-(2020/11/12(Thu) 16:05:25)
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 精度)


本当にミリ秒指定での算出が必要なら、処理を分けて、
「日数差」と「日未満の時刻差」を別々に演算してみてください。
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←時間の差をミリ秒で求める /夜叉姫 →Re[2]: 時間の差をミリ秒で求める /夜叉姫
 
上記関連ツリー

時間の差をミリ秒で求める / 夜叉姫 (20/11/12(Thu) 14:27) #96346
時間の差をミリ秒で求める / 魔界の仮面弁士 (20/11/12(Thu) 16:05) #96351 ←Now
  └ Re[2]: 時間の差をミリ秒で求める / 夜叉姫 (20/11/17(Tue) 08:47) #96365
    ├ Re[3]: 時間の差をミリ秒で求める / 通りすがり (20/11/17(Tue) 10:15) #96366
    └ Re[3]: 時間の差をミリ秒で求める / 魔界の仮面弁士 (20/11/17(Tue) 10:40) #96369

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信