Thread: intervals

intervals

From
"Edward W. Rouse"
Date:
I am writing a procedure and am having a little difficulty with an interval.
In the DECLARE section I have:

expire interval := '30 days'::interval;

which seems to work fine. In the BEGIN block I need to pull out the number
of days from a table and update the expire interval to that. But I can't
quite seem to get the replacement correct.

First I use "SELECT value into limit from" to get the new limit value. The
value is text, but I have also tried with SELECT (value::integer) into limit
from" with the same result. The error occurs here:

expire := '%  days'::interval, limit;

Now I have tried several different ways to get a new interval, such as '' ||
limit || days''::interval; and other various differently quoted variations,
but haven't found the one that works yet. I am still trying various
combinations, but thought that someone on the list has probably done this
already. I may, in fact, be doing it entirely wrong. So if someone knows the
correct/better/easier way to create a dynamic interval I'd appreciate a
clue.

Thanks.


Edward W. Rouse





Re: intervals

From
bricklen
Date:
On Thu, Nov 3, 2011 at 10:29 AM, Edward W. Rouse <erouse@comsquared.com> wrote:
> expire := '%  days'::interval, limit;

A couple ways spring to mind immediately. Using 10 as the example:

expire := 10 * '1 day'::INTERVAL;
expire := ('10' || ' days')::INTERVAL;


Re: intervals

From
"Jonathan S. Katz"
Date:
Hi Edward,

"LIMIT" is a keyword, which is where you are getting your errors.  Did you try a different variable name?

Best,

Jonathan

On Nov 3, 2011, at 1:29 PM, Edward W. Rouse wrote:

> I am writing a procedure and am having a little difficulty with an interval.
> In the DECLARE section I have:
>
> expire interval := '30 days'::interval;
>
> which seems to work fine. In the BEGIN block I need to pull out the number
> of days from a table and update the expire interval to that. But I can't
> quite seem to get the replacement correct.
>
> First I use "SELECT value into limit from" to get the new limit value. The
> value is text, but I have also tried with SELECT (value::integer) into limit
> from" with the same result. The error occurs here:
>
> expire := '%  days'::interval, limit;
>
> Now I have tried several different ways to get a new interval, such as '' ||
> limit || days''::interval; and other various differently quoted variations,
> but haven't found the one that works yet. I am still trying various
> combinations, but thought that someone on the list has probably done this
> already. I may, in fact, be doing it entirely wrong. So if someone knows the
> correct/better/easier way to create a dynamic interval I'd appreciate a
> clue.
>
> Thanks.
>
>
> Edward W. Rouse
>
>
>
>
> --
> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-sql


Re: intervals

From
"Edward W. Rouse"
Date:
That was part of the problem. Thanks for the info.

> -----Original Message-----
> From: pgsql-sql-owner@postgresql.org [mailto:pgsql-sql-
> owner@postgresql.org] On Behalf Of Jonathan S. Katz
> Sent: Thursday, November 03, 2011 1:41 PM
> To: Edward W. Rouse
> Cc: pgsql-sql@postgresql.org
> Subject: Re: [SQL] intervals
> 
> Hi Edward,
> 
> "LIMIT" is a keyword, which is where you are getting your errors.  Did
> you try a different variable name?
> 
> Best,
> 
> Jonathan
> 
> On Nov 3, 2011, at 1:29 PM, Edward W. Rouse wrote:
> 
> > I am writing a procedure and am having a little difficulty with an
> interval.
> > In the DECLARE section I have:
> >
> > expire interval := '30 days'::interval;
> >
> > which seems to work fine. In the BEGIN block I need to pull out the
> number
> > of days from a table and update the expire interval to that. But I
> can't
> > quite seem to get the replacement correct.
> >
> > First I use "SELECT value into limit from" to get the new limit
> value. The
> > value is text, but I have also tried with SELECT (value::integer)
> into limit
> > from" with the same result. The error occurs here:
> >
> > expire := '%  days'::interval, limit;
> >
> > Now I have tried several different ways to get a new interval, such
> as '' ||
> > limit || days''::interval; and other various differently quoted
> variations,
> > but haven't found the one that works yet. I am still trying various
> > combinations, but thought that someone on the list has probably done
> this
> > already. I may, in fact, be doing it entirely wrong. So if someone
> knows the
> > correct/better/easier way to create a dynamic interval I'd appreciate
> a
> > clue.
> >
> > Thanks.
> >
> >
> > Edward W. Rouse
> >
> >
> >
> >
> > --
> > Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
> > To make changes to your subscription:
> > http://www.postgresql.org/mailpref/pgsql-sql
> 
> --
> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-sql



Re: intervals

From
"Edward W. Rouse"
Date:
In conjunction with Jonathan, this has gotten me to the point where it works, sort of. Now I just need to change it so
thatit does more than 1 at a time. Since it currently isn't in a loop, it affects one and quits. But I needed to get it
todo that first, putting it in a loop should be the easy part. 

Thanks.

> -----Original Message-----
> From: pgsql-sql-owner@postgresql.org [mailto:pgsql-sql-
> owner@postgresql.org] On Behalf Of bricklen
> Sent: Thursday, November 03, 2011 1:44 PM
> To: Edward W. Rouse
> Cc: pgsql-sql@postgresql.org
> Subject: Re: [SQL] intervals
>
> On Thu, Nov 3, 2011 at 10:29 AM, Edward W. Rouse
> <erouse@comsquared.com> wrote:
> > expire := '%  days'::interval, limit;
>
> A couple ways spring to mind immediately. Using 10 as the example:
>
> expire := 10 * '1 day'::INTERVAL;
> expire := ('10' || ' days')::INTERVAL;
>
> --
> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-sql



Re: intervals

From
Michael Glaesemann
Date:
On Nov 3, 2011, at 13:43, bricklen wrote:

> On Thu, Nov 3, 2011 at 10:29 AM, Edward W. Rouse <erouse@comsquared.com> wrote:
>> expire := '%  days'::interval, limit;
>
> A couple ways spring to mind immediately. Using 10 as the example:
>
> expire := 10 * '1 day'::INTERVAL;

good.

> expire := ('10' || ' days')::INTERVAL;

bad.

Michael Glaesemann
grzm seespotcode net