6

SQL Serverに格納されているdatetime値の基礎となるデータ構造は何ですか(別の場合は2000と2005)。つまり、バイト表現になっていますか?SQL Serverのdatetimeの内部表現は何ですか?

おそらく、日時列を選択したときに表示されるデフォルトの表現は、文化固有の値/変更対象です。つまり、わからない基本的な構造は、YYYY-MM-DD HH:MM:SS.mmmにフォーマットされています。

理由私の所属する部署には、YYYY-MM-DD HH:MM:SS.mmmという文字列が記憶されているという一般的な見解がありますが、これは当てはまりません。

答えて

11

stored as an 8 byte field(1753-01-01から9999-12-31の範囲で、正確には0.00333秒まで)。

詳細はおそらく不透明であるが、私はウェブの状態で見つけたほとんどのリソース(1)(2)は以下:

最初の4つのバイトには、SQL Serverのエポック(1月1日からの日数を保存します1900)、2番目の4バイトは真夜中以降のティック数を格納します。ここでは、 "tick"は3.3ミリ秒です。

最初の4バイトは符号付きです(正または負にすることができます)。これにより、エポックより前の日付を表すことができる理由が説明されています。

+7

これは正しくありません。リンクされた記事から:実際には、SQL Serverは深夜から時計チックをそこに保存します。各クロックティックは3.33ミリ秒に相当します。 DATETIMEデータ型の精度が3分の1秒になっているのもその理由です。これもまた、BOLに正しく記載されています。 – ctusch

+1

@ctusch、私は "チック"のサイズを修正するために答えを更新しました(ほぼ7年後!)。 –

+0

興味深いことに、SQL Serverのドキュメントでは「精度」という用語が使用されています。それは "精度"と言うべきです。 –

関連する問題