[SQL Server] datetime 型は、なぜ 1753 年が下限なのか。
SQL Server の datetime 型は、1753 年 1 月 1 日から 9999 年 12 月 31 日までの日付範囲を持つ。従って、以下のような変換はエラーとなる。
それは datetime 型が「グレゴリオ暦」であることに起因している。
当時のイギリス帝国 (とその植民地) でグレゴリオ暦を採用した年が 1752 年であり、
通年としてグレゴリオ暦が始まったのが 1753 年からだからである。
グレゴリオ暦 (Wikipedia)
SQL Server 2008 からは dateime2 型が導入され、この型は 「西暦 1 年 1 月 1 日から西暦 9999 年 12 月 31 日 」の範囲となる。
歴史的な背景を知るとなかなか興味深い。
DECLARE @d DATETIME = CONVERT(DATETIME,'1752') -- varchar データ型から datetime データ型への変換の結果、範囲外の値になりました。では、なぜ 1753 年から開始なのか。
それは datetime 型が「グレゴリオ暦」であることに起因している。
当時のイギリス帝国 (とその植民地) でグレゴリオ暦を採用した年が 1752 年であり、
通年としてグレゴリオ暦が始まったのが 1753 年からだからである。
グレゴリオ暦 (Wikipedia)
SQL Server 2008 からは dateime2 型が導入され、この型は 「西暦 1 年 1 月 1 日から西暦 9999 年 12 月 31 日 」の範囲となる。
歴史的な背景を知るとなかなか興味深い。