1. ホーム
  2. sql-server

[解決済み】SQL Serverにおける1/1/1753の意味とは?

2022-05-06 02:28:08

質問

なぜ1753年なのか?1752年に何か恨みでもあるのだろうか?私の偉大な偉大な祖父は、とても怒るでしょう。

解決方法は?

1753年1月1日の決定( 1753-01-01 SQL Server の datetime の最小の日付値として、その起源は Sybaseの原点 .

しかし、日付の意味そのものは、この人物に起因している。

フィリップ・スタンホープ、チェスターフィールド第4伯爵。の舵取りをした人物。 1750年カレンダー(新様式)法 英国議会を通過した。これは、イギリスと当時の植民地にグレゴリオ暦を採用することを法律で定めたものである。

いくつかの 欠番日 <サブ (インターネットアーカイブリンク) 1752年、ユリウス暦から最終的に調整された英国暦において。1752年9月3日から1752年9月13日までは失われていた。

カレン・ディレイニー 説明済み このように選択します。

では、12日間が失われた今、どうすればいいのか。 日付の計算 例えば、どのように の間の日数を計算します。 1492年10月12日と1776年7月4日?このとき 12日足りない分を含めるのか?そのため この問題を解決する必要はありません。 最初のSybase SQL Serverは の開発者は、日付を許可しないことを決定しました。 1753年以前 それ以前を格納することができます。 文字フィールドを使用することで日付は変更できますが datetime関数は使用できません。 を使用することができます。 を文字列で指定します。

しかし、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のような他のソフトウェア実装と対照的です。 グレゴリオ暦 クラスは、1582年10月4日まではユリウス暦を使用し、その後は新しいグレゴリオ暦の1582年10月15日にジャンプするように設定されています。これは、それ以前のユリウス暦の閏年とそれ以降のグレゴリオ暦の閏年を正しく処理します。カットオーバーの日付は、呼び出し元が setGregorianChange() .

カレンダーの採用に関するいくつかの奇妙な点を論じた、かなり面白い記事です。 はこちらからご覧いただけます。 .