Re: How to get an inclusive interval when using daterange

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: hmidi slim <hmidi(dot)slim2(at)gmail(dot)com>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: How to get an inclusive interval when using daterange
Date: 2018-04-02 19:13:56
Message-ID: 23053.1522696436@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

hmidi slim <hmidi(dot)slim2(at)gmail(dot)com> writes:
> When I insert a data into this table I use this query:
> insert into availability values ('product x', daterange('2018-02-02',
> '2018-03-01', '[]')

> So I get a period like this: [2018-02-02, 2018-03-02)

Yup.

> In my app I tried to subtract a day from the period when I got it from
> database.I'm using daterange and not tsrange because the daterange gives me
> less execution time when I make tests with a huge number of data.So is
> there any way to get an inclusive interval with daterange or I have to use
> tsrange to get inclusive intervals?

No, daterange will always canonicalize a range into '[)' format.
This is explained (perhaps not with adequate clarity) in
https://www.postgresql.org/docs/10/static/rangetypes.html#RANGETYPES-DISCRETE

The key reason why is to make it clearer which range specifications
are equal. For instance, it's not really clear whether
['2018-02-02','2018-03-01'] and ['2018-02-02','2018-03-02') represent
the same set of values --- they do if it's a daterange, but not if it's
a tsrange. Canonicalizing makes equal ranges look equal.

regards, tom lane

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Christophe Pettus 2018-04-02 21:04:47 Re: [PATCH] Logical decoding of TRUNCATE
Previous Message Andres Freund 2018-04-02 18:50:03 Re: [PATCH] Logical decoding of TRUNCATE