4

T-SQL のデータ型のサイズに関して msdn を閲覧していて、少し混乱していることに気付きました。

http://msdn.microsoft.com/en-us/library/ms186724.aspxによると、datetime は 8 バイトを使用し、1753 年から 9999 年の日付を hh:mm:ss[.nnn] の時間精度で格納します。日付と時刻を別々に見ると、時間は 3 ~ 5 バイトを使用して hh:mm:ss[.nnnnnnn] を格納し、日付は 3 バイトを使用して 0 ~ 9999 年を格納します。

私を混乱させているのは、日付と時刻を別々に使用すると、datetime よりも 4 桁多くの精度で年と時刻の範囲が広くなるにもかかわらず、どちらも 8 バイトを使用するということですか? datetime の範囲が小さく、精度が低いのに、同じサイズを使用してそれ自体を格納するのはなぜですか?

4

1 に答える 1

4

Datetime データ型は、個別の日付と時刻のデータ型よりも優先されます。Datetime データ型は、2 つの整数として 8 バイトを使用します。最初の整数は 01/01/1900 を 0 として格納します。1900 年より前の日付は負の日数として格納され、それ以降の日付は 01/01/1900 からの日数を示す正の整数として格納されます。

日付が 1753 年からしか始まらない理由は、これがグレゴリオ暦の開始日であり、これより前の日付を特定するには国を知る必要があるためです。これは、Sql Server の派生元である、元の Sybase 開発者によって下された決定です。

時刻の整数部分には、午前 0 時からのティック数が格納されます。1 ティックは 1/300 秒です。

良い例と情報はここにあります。 http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/how-are-dates-stored-in-sql-server およびhttp://karaszi.com/the-ultimate-guide-to-the-日時データ型

于 2013-06-10T23:09:59.693 に答える