1753年1月1日を使用する決定(1753-01-01
)SQLServerの日時の最小日付値がSybaseオリジンに戻るため。
日付自体の重要性は、この男性に起因する可能性があります。
フィリップスタンホープ、チェスターフィールドの第4伯爵。 1750年のカレンダー(新スタイル)法を英国議会で操縦したのは誰か。これは、英国とその当時の植民地にグレゴリオ暦を採用するために法制化されました。
欠席日がありました(インターネットアーカイブリンク) 調整が最終的にユリウス暦から行われた1752年の英国の暦で。 1752年9月3日から1752年9月13日まで失われました。
カレン・デラニーはこの方法で選択を説明しました
では、12日が失われた場合、どのように日付を計算できますか?たとえば、1492年10月12日から1776年7月4日までの日数をどのように計算できますか?足りない12日を含めますか?この問題を解決する必要がないように、元のSybase SQL Server開発者は1753より前の日付を許可しないことを決定しました。文字フィールドを使用して以前の日付を保存できますが、文字フィールドに保存した以前の日付の日時関数を使用することはできません。
1753年の選択はややアングロセントリックに見えますが、ヨーロッパの多くのカトリック諸国は、英国の実施前に170年間カレンダーを使用していました(元々は教会の反対により遅れていました)。逆に、多くの国は、1918年にロシアでカレンダーを改革しませんでした。実際、1917年の10月革命は、グレゴリオ暦の下で11月7日に始まりました。
両方のdatetime
そして新しいdatetime2
ジョーの回答で言及されているデータ型は、これらの地域の違いを説明しようとせず、単にグレゴリオ暦を使用します。
したがって、datetime2
の範囲が広くなります
SELECT CONVERT(VARCHAR, DATEADD(DAY,-5,CAST('1752-09-13' AS DATETIME2)),100)
返品
Sep 8 1752 12:00AM
datetime2
の最後のポイント データ型は、実際に発明されるかなり前に逆方向に投影された先発グレゴリオ暦を使用するため、歴史的な日付の処理には限定的に使用されます。
これは、Javaグレゴリオ暦クラスなどの他のソフトウェア実装とは対照的です。Javaグレゴリオ暦クラスは、デフォルトで1582年10月4日までの日付でユリウス暦に従い、新しいグレゴリオ暦では1582年10月15日にジャンプします。その日付より前のうるう年のジュリアンモデルと、その日付以降のグレゴリオ暦モデルを正しく処理します。カットオーバー日は、呼び出し元がsetGregorianChange()
を呼び出すことで変更できます。 。
カレンダーの採用に関するいくつかの特徴について説明しているかなり面白い記事がここにあります。