DateTimeオブジェクトとが保存され、SQLサーバーからが返されたDATETIMEオブジェクトに格納されたDateTimeオブジェクトを比較するコードがあるとします。SQL DATETIMEルールを使用する丸め日付時間
比較はhh:mm:ss-equalityで行われますが、SQL Serverは保存時に2番目のコンポーネントを '変更'するため、1.5/1000時間程度の比較が失敗する可能性があります。
DATETIME値としてデータベースに保存されたSQL Serverのwill round/truncate this valueためです:
datetime値は0.000、0.003、または0.007秒の単位に四捨五入されている。..
同じ丸め処理を行う(標準)C#/ .NET関数がありますか?
この質問の主な目的は、比較のために値をより先に標準化して保存することです。つまり、F(original) == F(saved)
は常に真でなければなりません。
最終的な目標は、値がhh:mm:01.999がhh:mm:01.997として格納されるように、「正しい秒数」内に確実に保存することです。これにより、元のDateTime値または復元された値に関係なく、hh:mm:ss-equalityの比較が信頼できるものになります。この場合、original.Second == F(original).Second
も常に真でなければなりません。
より良くまたはより悪いことに、1つの広く使用されている仮定は、hh:mm:ssごとに比較が行われるため、2ミリ秒の単純なイプシロン比較が出力されます。最終的な目標を解決する可能性のある比較関数について強く主張することには反対しません。
@ user2864740ちょっと、それに対処するために編集しました。 :) – hvd
ええ〜私はオプションを感じています。今、私はSQLのラウンド・ツー・フィックス・ソー・ツー・イット・オン・ラウンドに傾いています。これにより.9985 +の値は.997になります(最初は.0に丸められた後になります)が、コードが同じ秒を「保つ」こともできます。 – user2864740
時間の値が均等に分散されることになっている場合、 '.997'ミリ秒の値がそうでなければならない可能性が高くなる統計的異常が発生することを意味します。それはおそらく問題ではありませんが、あなたはそれに気づくべきです。 – hvd