ホームページ > データベース > mysql チュートリアル > SQL Server が DateTime データを保存するときにミリ秒を失うのはなぜですか?

SQL Server が DateTime データを保存するときにミリ秒を失うのはなぜですか?

Susan Sarandon
リリース: 2025-01-13 08:04:42
オリジナル
546 人が閲覧しました

Why Does SQL Server Lose Milliseconds When Storing DateTime Data?

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 つです:

  1. 数値フィールド: タイムスタンプを数値として保存します (エポックからのミリ秒を表すなど)。 これには、人間が読める形式との間で変換するカスタム コードが必要です。

  2. 文字列表現: 一貫した形式 (例: 'YYYY-MM-DD HH:mm:ss.fff') を使用して、タイムスタンプを文字列として保存します。 必要に応じて、クエリを高速化するために近似 datetime フィールドを含めます。

どちらの方法でも複雑さが増します。 ミリ秒精度の必要性を、追加の設計およびメンテナンスのオーバーヘッドと照らし合わせて慎重に評価してください。

以上がSQL Server が DateTime データを保存するときにミリ秒を失うのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート