2016-09-16 9 views
1

PostgreSQLに終了日を含むdaterangeを出力するよう指示する方法はありますか?PostgreSQL:終了日を含むdaterangeを取得するには?

SELECT '[2016-09-01,2016-09-10]'::daterange

出力は次のとおりです:

[2016-09-01,2016-09-11)

私は戻って、データベースから取得することは一致していないので、これは、本当に迷惑です私はこれを実行した場合たとえば

、私が入れたもの

+0

あなたが入れたものが戻ってきます。どちらの範囲も同じです。 '' [2016-09-01,2016-09-10] ':: daterange =' [2016-09-01,2016-09-11] ':: daterange'は 'true'を返します –

答えて

0

これは本当にannですoying、私は戻って、データベースから何を得るので、私が入れた内容と一致しません。

[2016-09-01,2016-09-11)は日付2016-09-10を含めで出力します。 2016-09-11を除外するが、に、すなわちその前に来る日付、2016-09-10以下を含むように範囲の上限を終了)

手段。

構文の詳細については、documentationを参照してください。

1

この動作は意図的なものであり、固い理由があります。 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をお読みください。

関連する問題