Thread: subtratcing dates

subtratcing dates

From
Fran Fabrizio
Date:
Hello all,

I have a table that has two columns, tstamp of type timestamp, and limit
of type int.

I want to have a query that tells me whether or not the timestamp is
within 'limit' minutes of the current time.

so, something like:

select tstamp > now() + '-60 minute' from log;

except i need the 60 to be the value of the 'limit' column instead so...

select tstamp > now() + '-limit minute' from log;

which of course doesn't work.  I can't seem to get it right no matter
what I try.  Any ideas?  Thanks!

-Fran


Re: subtratcing dates

From
Tom Lane
Date:
Fran Fabrizio <ffabrizio@exchange.webmd.net> writes:
> I want to have a query that tells me whether or not the timestamp is
> within 'limit' minutes of the current time.

A poorly documented fact is that you can coerce an integer number of
seconds into a reltime, which can then be added to or subtracted from
a timestamp.  So:

    select tstamp > now() - reltime(limit*60) from ...

should do it.

            regards, tom lane

Re: subtratcing dates

From
Fran Fabrizio
Date:
Thanks for the tip Tom!

At first, I accidentally tried to do reltime(limit*60) where limit was
accidentally an interval instead of an integer, and my database crashed
and exited horribly.  Perhaps that's why it's a poorly documented
function!  ;-)

-Fran

> Fran Fabrizio <ffabrizio@exchange.webmd.net> writes:
> > I want to have a query that tells me whether or not the timestamp is
> > within 'limit' minutes of the current time.
>
> A poorly documented fact is that you can coerce an integer number of
> seconds into a reltime, which can then be added to or subtracted from
> a timestamp.  So:
>
>         select tstamp > now() - reltime(limit*60) from ...
>
> should do it.
>
>                         regards, tom lane


Re: subtratcing dates

From
Tom Lane
Date:
Fran Fabrizio <ffabrizio@exchange.webmd.net> writes:
> At first, I accidentally tried to do reltime(limit*60) where limit was
> accidentally an interval instead of an integer, and my database crashed
> and exited horribly.

Yeah?  Did you have any nulls in the limit column?
    select reltime(null::interval);
bombs in 7.0 (but is fine in 7.1).  interval_reltime is far from the
only function that's not NULL-proof in pre-7.1 releases :-(

            regards, tom lane