PostgreSQLに終了日を含むdaterangeを出力するよう指示する方法はありますか?PostgreSQL:終了日を含むdaterangeを取得するには?
SELECT '[2016-09-01,2016-09-10]'::daterange
出力は次のとおりです:
[2016-09-01,2016-09-11)
私は戻って、データベースから取得することは一致していないので、これは、本当に迷惑です私はこれを実行した場合たとえば
、私が入れたもの
PostgreSQLに終了日を含むdaterangeを出力するよう指示する方法はありますか?PostgreSQL:終了日を含むdaterangeを取得するには?
SELECT '[2016-09-01,2016-09-10]'::daterange
出力は次のとおりです:
[2016-09-01,2016-09-11)
私は戻って、データベースから取得することは一致していないので、これは、本当に迷惑です私はこれを実行した場合たとえば
、私が入れたもの
これは本当にannですoying、私は戻って、データベースから何を得るので、私が入れた内容と一致しません。
[2016-09-01,2016-09-11)
は日付2016-09-10
を含めで出力します。 が2016-09-11
を除外するが、に、すなわちその前に来る日付、2016-09-10
以下を含むように範囲の上限を終了)
手段。
構文の詳細については、documentationを参照してください。
この動作は意図的なものであり、固い理由があります。 daterange
は、すべての入力値を正規形式に変更する離散範囲型です。 これは、様々な形で同じ範囲を比較することが可能になる:
select '[2016-09-01,2016-09-10]'::daterange = '[2016-09-01,2016-09-11)'::daterange;
-- yields true
あなたがあなた自身の範囲の種類作成することができます。
create type mydaterange as range
(subtype=date,
subtype_diff=daterange_subdiff);
select '[2016-09-01,2016-09-10]'::daterange, '[2016-09-01,2016-09-10]'::mydaterange
daterange | mydaterange
-------------------------+-------------------------
[2016-09-01,2016-09-11) | [2016-09-01,2016-09-10]
(1 row)
をしかし、それはこの場合
select '[2016-09-01,2016-09-10]'::mydaterange = '[2016-09-01,2016-09-11)'::mydaterange;
-- yields false!
のようにほとんど意味がありません
約Discrete Range Typesをお読みください。
あなたが入れたものが戻ってきます。どちらの範囲も同じです。 '' [2016-09-01,2016-09-10] ':: daterange =' [2016-09-01,2016-09-11] ':: daterange'は 'true'を返します –