Обсуждение: How to update upper-bound of tstzrange ?
Could someone kindly help me out with the correct syntax ?
My first thought was the below but that doesn't work:
update foo set upper(bar_times)=upper(bar_times)+interval '1' hour where bar_id='abc';
ERROR: syntax error at or near "("
LINE 1: update event_sessions set upper(bar_times)=upper(bar_ti...
Hi
Try this one.
UPDATE foo
SET bar_times = bar_times + INTERVAL '1 hour'
WHERE bar_id = 'abc';
SET bar_times = bar_times + INTERVAL '1 hour'
WHERE bar_id = 'abc';
Regards
Kashif Zeeshan
Bitnine Global
On Mon, May 20, 2024 at 3:30 PM Laura Smith <n5d9xq3ti233xiyif2vp@protonmail.ch> wrote:
Could someone kindly help me out with the correct syntax ?
My first thought was the below but that doesn't work:
update foo set upper(bar_times)=upper(bar_times)+interval '1' hour where bar_id='abc';
ERROR: syntax error at or near "("
LINE 1: update event_sessions set upper(bar_times)=upper(bar_ti...
On 2024-05-20 12:30 +0200, Laura Smith wrote:
> Could someone kindly help me out with the correct syntax ?
>
> My first thought was the below but that doesn't work:
>
> update foo set upper(bar_times)=upper(bar_times)+interval '1' hour where bar_id='abc';
> ERROR: syntax error at or near "("
> LINE 1: update event_sessions set upper(bar_times)=upper(bar_ti...
Use the constructor function:
UPDATE foo SET bar_times = tstzrange(lower(bar_times), upper(bar_times) + interval '1' hour);
But this does not preserve the inclusivity/exclusivity of bounds from
the input range, so you may have to pass in the third argument as well.
https://www.postgresql.org/docs/current/rangetypes.html#RANGETYPES-CONSTRUCT
--
Erik
On Mon, 2024-05-20 at 13:56 +0200, Erik Wienhold wrote:
> On 2024-05-20 12:30 +0200, Laura Smith wrote:
> > Could someone kindly help me out with the correct syntax ?
> >
> > My first thought was the below but that doesn't work:
> >
> > update foo set upper(bar_times)=upper(bar_times)+interval '1' hour where bar_id='abc';
> > ERROR: syntax error at or near "("
> > LINE 1: update event_sessions set upper(bar_times)=upper(bar_ti...
>
> Use the constructor function:
>
> UPDATE foo SET bar_times = tstzrange(lower(bar_times), upper(bar_times) + interval '1' hour);
>
> But this does not preserve the inclusivity/exclusivity of bounds from
> the input range, so you may have to pass in the third argument as well.
>
> https://www.postgresql.org/docs/current/rangetypes.html#RANGETYPES-CONSTRUCT
If you need to preserve the information whether the upper and lower bounds
are inclusive or not, you could
UPDATE foo
SET bar_times = tstzrange(
lower(bar_times),
upper (bar_times) + INTERVAL '1 hour',
CASE WHEN lower_inc(bar_times) THEN '[' ELSE '(' END ||
CASE WHEN upper_inc(bar_times) THEN ']' ELSE ')' END
)
WHERE ...
Yours,
Laurenz Albe
Thanks all for your answers ! Much appreciated.
Sent with Proton Mail secure email.
On Tuesday, 21 May 2024 at 11:02, Laurenz Albe <laurenz.albe@cybertec.at> wrote:
> On Mon, 2024-05-20 at 13:56 +0200, Erik Wienhold wrote:
>
> > On 2024-05-20 12:30 +0200, Laura Smith wrote:
> >
> > > Could someone kindly help me out with the correct syntax ?
> > >
> > > My first thought was the below but that doesn't work:
> > >
> > > update foo set upper(bar_times)=upper(bar_times)+interval '1' hour where bar_id='abc';
> > > ERROR: syntax error at or near "("
> > > LINE 1: update event_sessions set upper(bar_times)=upper(bar_ti...
> >
> > Use the constructor function:
> >
> > UPDATE foo SET bar_times = tstzrange(lower(bar_times), upper(bar_times) + interval '1' hour);
> >
> > But this does not preserve the inclusivity/exclusivity of bounds from
> > the input range, so you may have to pass in the third argument as well.
> >
> > https://www.postgresql.org/docs/current/rangetypes.html#RANGETYPES-CONSTRUCT
>
>
> If you need to preserve the information whether the upper and lower bounds
> are inclusive or not, you could
>
> UPDATE foo
> SET bar_times = tstzrange(
> lower(bar_times),
> upper (bar_times) + INTERVAL '1 hour',
> CASE WHEN lower_inc(bar_times) THEN '[' ELSE '(' END ||
> CASE WHEN upper_inc(bar_times) THEN ']' ELSE ')' END
> )
> WHERE ...
>
> Yours,
> Laurenz Albe