Обсуждение: Date comparison question
Hi I require a query that will see if a stored date is more than a certain interval before the current date. Using an interval of 10 hours, the query would be something like: SELECT * FROM utable WHERE now() - utimestamp > interval '10 hours'; The problem I am having is that the interval is not fixed, and I would like to be able to store it as a value in a database table. The unit of the interval can, however, be fixed, and will almost certainly be fixed to hours. I have not been able to find a way of doing what I require, does anybody have any ideas to what I need to do? Cheers. Jan. _________________________________________________________________ Tired of 56k? Get a FREE BT Broadband connection http://www.msn.co.uk/specials/btbroadband
On Tue, 20 May 2003, Jan Bodey wrote:
> Hi
>
> I require a query that will see if a stored date is more than a certain
> interval before the current date. Using an interval of 10 hours, the query
> would be something like:
>
> SELECT * FROM utable
> WHERE now() - utimestamp > interval '10 hours';
>
> The problem I am having is that the interval is not fixed, and I would like
> to be able to store it as a value in a database table. The unit of the
> interval can, however, be fixed, and will almost certainly be fixed to
> hours.
>
> I have not been able to find a way of doing what I require, does anybody
> have any ideas to what I need to do?
If you assume that you're just going to stick one row in the interval
table, I think you can do something kinda like:
create table interv(i interval);insert into interv values ('10 hours');analyze interv;select utable.* from utable,
intervwhere now()-utimestamp>i;
This could be made more complicated if you want to have multiple interval
values, etc. Also, neither of the above is probably terribly fast if
utable is big.
"Jan Bodey" <jan_bodey@hotmail.com> writes:
> SELECT * FROM utable
> WHERE now() - utimestamp > interval '10 hours';
> The problem I am having is that the interval is not fixed, and I would like
> to be able to store it as a value in a database table. The unit of the
> interval can, however, be fixed, and will almost certainly be fixed to
> hours.
Do you not want to store the values as type interval? That would seem
like the most straightforward answer. If you really want to store them
as plain numbers, there's a float-times-interval operator, so you could
do something like... > table.float8col * interval '1 hour';
regards, tom lane
The problem I have with having the values as type interval, is that I am restricted by using Torque. I can't work out what Torque type (if any!) maps to Interval! Your 'float-times-interval' operator may well get me around that though, although I will not test until tomorrow, high time I left the office!! Cheers Jan. > >"Jan Bodey" <jan_bodey@hotmail.com> writes: > > SELECT * FROM utable > > WHERE now() - utimestamp > interval '10 hours'; > > > The problem I am having is that the interval is not fixed, and I would >like > > to be able to store it as a value in a database table. The unit of the > > interval can, however, be fixed, and will almost certainly be fixed to > > hours. > >Do you not want to store the values as type interval? That would seem >like the most straightforward answer. If you really want to store them >as plain numbers, there's a float-times-interval operator, so you could >do something like > ... > table.float8col * interval '1 hour'; > > regards, tom lane _________________________________________________________________ Express yourself with cool emoticons - download MSN Messenger today! http://www.msn.co.uk/messenger