SQL Server の DateTime データ型: 欠落しているミリ秒
データの正確性は、特にタイムスタンプを扱う場合に重要です。 ただし、SQL Server の datetime
型には、ミリ秒の損失という共通の問題があります。この記事では、この問題が発生する理由を調査し、解決策を提供します。
次のシナリオを考えてみましょう: データは以下を使用して挿入されます:
<code class="language-sql">INSERT INTO TESTTABLE (IntField, BitField, StringField, DateField) VALUES ('1', 1, 'hello', {ts '2009-04-03 15:41:27.378'});</code>
次のコマンドを使用してデータを取得します:
<code class="language-sql">select * from testtable with (NOLOCK)</code>
は、切り詰められた DateField
を明らかにします: "2009-04-03 15:41:27.377"。 最後のミリ秒は過ぎ去りました。
問題の根源
datetime
データ型に固有の制限が原因です。 SQL Server の datetime
は、約 1/300 秒 (0、3、または 7 ミリ秒) までの時間精度のみをサポートします。これらの増分を超える値は切り捨てられます。 これは、この例でミリ秒が欠落していることを説明しています。
ミリ秒精度の達成
ミリ秒の精度を維持するには、代替方法が必要です。 単一の完璧な解決策はありませんが、一般的なアプローチは次の 2 つです:
数値フィールド: タイムスタンプを数値として保存します (エポックからのミリ秒を表すなど)。 これには、人間が読める形式との間で変換するカスタム コードが必要です。
文字列表現: 一貫した形式 (例: 'YYYY-MM-DD HH:mm:ss.fff') を使用して、タイムスタンプを文字列として保存します。 必要に応じて、クエリを高速化するために近似 datetime
フィールドを含めます。
どちらの方法でも複雑さが増します。 ミリ秒精度の必要性を、追加の設計およびメンテナンスのオーバーヘッドと照らし合わせて慎重に評価してください。
以上がSQL Server が DateTime データを保存するときにミリ秒を失うのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。