SQL Server の日時精度: ミリ秒の謎
ミリ秒を含む日時値を SQL Server データベースに挿入するとき (例: 2009-04-03 15:41:27.378)、一見失われたミリ秒に気づくかもしれません (例: 2009-04-03 15:41 になります) :27.377)。 これはバグではありません。これは、SQL Server が日時精度を処理する方法の結果です。
SQL Server が時刻値を保存する方法
SQL Server の datetime
データ型には制限があります。つまり、約 1/300 秒の精度で時刻値のみを保存します。 これは、ミリ秒が正確に保存されていないことを意味します。これらは 3 つの可能な値 (0、3、または 7) のいずれかに丸められます。
丸めプロセス
挿入された値 (27.378 ミリ秒) はこれらのサポートされている値の間にあるため、SQL Server はそれを最も近い許容ミリ秒 (27.377) に切り捨てます。 これにより、明らかな矛盾が説明されます。
ミリ秒精度の維持: 回避策
ミリ秒の精度を維持するには、次の代替案を検討してください。
数値ストレージ: 特定のエポックからのミリ秒数を表す数値型 (例: bigint
または decimal
) として日時値を保管します。表示やその他の操作で必要な場合は、これを datetime
値に変換します。
文字列ベースのストレージ: 一貫した形式 (yyyy-MM-dd HH:mm:ss.fff など) を使用して日時値を文字列として保存します。 これにより、完全なミリ秒値が保持されますが、日付/時刻の計算には変換が必要です。
ハイブリッド アプローチ: おおよその日付/時刻の保存には datetime
列を使用し (パフォーマンス上の理由から)、正確なミリ秒値を保存するには別の文字列または数値列を使用します。
これらのアプローチにより、複雑さは若干増しますが、ミリ秒データはそのまま残ります。
以上がSQL Server に日時値を挿入するとミリ秒が表示されなくなるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。