Thread: 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