Обсуждение: Subtracting from a date
I need to find all records with a date field (date_effective) 3 years or less prior to now(). This clearly must be possible, but I'm not figuring it out. Any suggestions? --------------------------------------------------------------------- Andrew J. Perrin - aperrin@demog.berkeley.edu - NT/Unix Admin/Support Department of Demography - University of California at Berkeley 2232 Piedmont Avenue #2120 - Berkeley, California, 94720-2120 USA http://demog.berkeley.edu/~aperrin --------------------------SEIU1199
WHERE age('now',date_effective::datetime)<='3 years'::timespan I don't know if 'now' in that context is still the authoritative way to write now, maybe it should be WHERE age(now(),date_effective::datetime)<='3 years'::timespan if date_effective is actually a datetime field, which I understand we are moving to in 7.0 (date fields being non-SQL-standard), then you don't need the cast, obviously. ---------------------------------------------------------------- Moray.McConnachie@computing-services.oxford.ac.uk ----- Original Message ----- From: "Andrew Perrin - Demography" <aperrin@demog.berkeley.edu> To: <pgsql-sql@postgresql.org> Sent: Wednesday, April 12, 2000 6:46 PM Subject: [SQL] Subtracting from a date > I need to find all records with a date field (date_effective) 3 years or > less prior to now(). This clearly must be possible, but I'm not figuring > it out. Any suggestions? > > --------------------------------------------------------------------- > Andrew J. Perrin - aperrin@demog.berkeley.edu - NT/Unix Admin/Support > Department of Demography - University of California at Berkeley > 2232 Piedmont Avenue #2120 - Berkeley, California, 94720-2120 USA > http://demog.berkeley.edu/~aperrin --------------------------SEIU1199 > >
What would be wrong with: SELECT date_effective FROM your_table WHERE date_effective <= (now() + '3 years ago') Certainly looks alittle mmore readable. Andy On Thu, 13 Apr 2000, Moray McConnachie wrote: > WHERE age('now',date_effective::datetime)<='3 years'::timespan > > I don't know if 'now' in that context is still the authoritative way to > write now, maybe it should be > > WHERE age(now(),date_effective::datetime)<='3 years'::timespan > > if date_effective is actually a datetime field, which I understand we are > moving to in 7.0 (date fields being non-SQL-standard), then you don't need > the cast, obviously. > ---------------------------------------------------------------- > Moray.McConnachie@computing-services.oxford.ac.uk > > ----- Original Message ----- > From: "Andrew Perrin - Demography" <aperrin@demog.berkeley.edu> > To: <pgsql-sql@postgresql.org> > Sent: Wednesday, April 12, 2000 6:46 PM > Subject: [SQL] Subtracting from a date > > > > I need to find all records with a date field (date_effective) 3 years or > > less prior to now(). This clearly must be possible, but I'm not figuring > > it out. Any suggestions? > > > > --------------------------------------------------------------------- > > Andrew J. Perrin - aperrin@demog.berkeley.edu - NT/Unix Admin/Support > > Department of Demography - University of California at Berkeley > > 2232 Piedmont Avenue #2120 - Berkeley, California, 94720-2120 USA > > http://demog.berkeley.edu/~aperrin --------------------------SEIU1199 > > > > >
> SELECT date_effective FROM your_table WHERE date_effective <= (now() + '3 years ago') That looks good. If date_effective is a datetime - should be date_effective::datetime if as Andrew said date_effective is a date field, I guess. Also your inequality is the wrong way round for things less than or equal to 3 years old, which is what I thought Andrew wanted. I think it's a bit faster than the age() construction, too. ---------------------------------------------------------------- Moray.McConnachie@computing-services.oxford.ac.uk