質問#1について :クローズドオープンは、学術文献で20〜25年の歴史を持つ、日付範囲を処理するための標準的な方法です。 Bitemporal Data の24〜25ページを参照してください。 Tom Johnston著、およびSQLでの時間指向データベースアプリケーションの開発 リチャード・スノッドグラス作。
しかし、その理由の1つは、連続する範囲に重複がないことだと思います。 a
の場合 は[May2016, Jun2016)
およびb
は[Jun2016, Jul2016)
、彼らは日を共有しません。したがって、それらは「スナップ」し、接触するエッジケースについて心配する必要はありません。
クローズドオープンの(おそらく)1つの欠点は、空の範囲を指定できないことです。 [May2016, May2016)
[May2016, May2016]
に対して、は単なる自己矛盾です。 瞬時です。
質問#2について :これも違うかもしれませんが、upper([May2016, Jun2016))
を作成することのいくつかの利点が考えられます。 リターンJun2016
:
- 範囲の解像度に関係なく、同じものを返します。
- これは、オープンエンドポイントの数学的意味に似ており、のみです。 考えられる答え。
- 「ラベル」に一致するものを返すので、おそらくそれほど驚くことではありません。
- 2つの範囲が「一致」するかどうかを簡単に確認できます:
upper(a) = lower(b)
。
また、Postgresではすべて 時間関連のデータ型は離散的です。以前はfloatベースのタイムスタンプを使用してPostgresをコンパイルするオプションがありましたが、非推奨であり、私はこれに遭遇したことがありません。