Re: [SQL] (Fwd) Hi and some advice on Dates
От | Ulf Mehlig |
---|---|
Тема | Re: [SQL] (Fwd) Hi and some advice on Dates |
Дата | |
Msg-id | 199811080922.KAA02179@uni-bremen.de обсуждение исходный текст |
Ответ на | (Fwd) Hi and some advice on Dates ("Andrew Mather (Powered By Linux)" <mathera@woody.agvic.gov.au>) |
Список | pgsql-sql |
Andrew Mather <mathera@woody.agvic.gov.au> wrote: > How to query a table and look for any records where the value in a > date field is greater than (say) 10 days ago Maybe like this: -- create a(n example) table: => create table xxx (d date, something text); CREATE => insert into xxx values ('09.11.1998', 'bbbbb!'); INSERT 72800 1 => insert into xxx values ('02.11.1998', 'aaaa!'); INSERT 72801 1 => insert into xxx values ('08.11.1998', 'cccc!'); INSERT 72802 1 -- have a look (note that I'm using the 'German' date style) => select * from xxx; d|something ----------+--------- 09.11.1998|bbbbb! 02.11.1998|aaaa! 08.11.1998|cccc! (3 rows) 'today' gives current date when casted ('::' operator) to 'date' type; the calculation of difference is simple: => select * from xxx where d between 'today'::date - 10 and 'today'::date; d|something ----------+--------- 02.11.1998|aaaa! 08.11.1998|cccc! (2 rows) > Calculate the difference between two times on the same day. (I have > experimented with age() and it sort of does wht I want..is there any > other way ?) There are various possibilities, depends on what you want. For calculating another 'datetime', try: => select 'now'::datetime as now, 'now'::datetime - '10 secs'::timespan as ten_s_ago; now |ten_s_ago --------------------------+-------------------------- 08.11.1998 09:59:54.00 MET|08.11.1998 09:59:44.00 MET (1 row) You have to cast to a proper type; e.g., you can't do WRONG! => select 'now'::time as now, WRONG! 'now'::time - '10 secs'::timespan as ten_s_ago; probably because the 'time'-type doesn't know anything about the fact that midnight is the beginning of a new day and everything is set to zero ... For calculating a 'timespan', do => select 'now'::datetime - '08.11.1998 06:00'::datetime as interv; interv ------------------------ @ 4 hours 6 mins 30 secs(1 row) or => select date_part('epoch', 'now'::datetime - '08.11.1998 06:00'::datetime) as interv; interv ------- 7708135 (1 row) if you need the result in seconds. Hope it helps! Ulf -- ====================================================================== %%%%% Ulf Mehlig <ulf.mehlig@uni-bremen.de> %%%%!%%% Projekt "MADAM" <umehlig@uni-bremen.de> %%%% %!% %%%% ---------------------------------------------------- ---| %%% MADAM: MAngrove | Center for Tropical Marine ||--%!% Dynamics | Biology || And | Fahrenheitstrasse 1 _ /||\_/\_ Management | / / \ \ ~~~~~~~~~~~~~~~~~ | 28359 Bremen/Germany ~~~~~~~~~~~~~~~~~~~~
В списке pgsql-sql по дате отправления: