Thread: Extract between year *and* month
Hi - I'd like to return search results based on a date range that is selected by the user : <select name="date1yy"> <option value="1995-01-01" selected>1995</option> <select name="date2yy"> <option value="2006-12-31" selected>2006</option> My SQL is : select * from tablename where title like ('%nith%') and recall_date between extract(year from date '1995-01-01') and extract(year from date '2006-12-31') order by recall_date How can I add the MONTH to be included in the between statement ? If I select 1995 - 2006 it currently only returns rows up to 2005-12-31 THANKS!
am Thu, dem 16.11.2006, um 13:03:20 -0800 mailte One folgendes: > Hi - I'd like to return search results based on a date range that is > selected by the user : > > <select name="date1yy"> > <option value="1995-01-01" selected>1995</option> > > <select name="date2yy"> > <option value="2006-12-31" selected>2006</option> > > My SQL is : > > select * > from tablename > where title like ('%nith%') > and recall_date between > extract(year from date '1995-01-01') > and extract(year from date '2006-12-31') > order by recall_date > > How can I add the MONTH to be included in the between statement ? > If I select 1995 - 2006 it currently only returns rows up to 2005-12-31 and to_char(recall_date, 'yyyy-mm') between to_char('1995-01-01'::date, 'yyyy-mm') and to_char('2006-12-31'::date, 'yyyy-mm') order by recall_date; **untested** Andreas -- Andreas Kretschmer Kontakt: Heynitz: 035242/47215, D1: 0160/7141639 (mehr: -> Header) GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net
One wrote: > Hi - I'd like to return search results based on a date range that is > selected by the user : > > <select name="date1yy"> > <option value="1995-01-01" selected>1995</option> > > <select name="date2yy"> > <option value="2006-12-31" selected>2006</option> > > My SQL is : > > select * > from tablename > where title like ('%nith%') > and recall_date between > extract(year from date '1995-01-01') > and extract(year from date '2006-12-31') > order by recall_date > > How can I add the MONTH to be included in the between statement ? > If I select 1995 - 2006 it currently only returns rows up to 2005-12-31 > > THANKS! > Try select * from tablename where title like ('%nith%') and date_trunc('month',recall_date::timestamp) >= date_trunc('month','1995-01-01'::timestamp) and date_trunc('month',recall_date::timestamp) <= date_trunc('month','2006-12-31'::timestamp) order by recall_date > > ---------------------------(end of broadcast)--------------------------- > TIP 5: don't forget to increase your free space map settings > > >
Hi! You could use date_trunc instead of extract to truncate the date down to the month: select date_trunc('month','2006-12-31'::timestamp); date_trunc --------------------- 2006-12-01 00:00:00 Greetings, Matthias > -----Original Message----- > From: pgsql-general-owner@postgresql.org > [mailto:pgsql-general-owner@postgresql.org] On Behalf Of One > Sent: Thursday, November 16, 2006 10:03 PM > To: pgsql-general@postgresql.org > Subject: [GENERAL] Extract between year *and* month > > > Hi - I'd like to return search results based on a date range that is > selected by the user : > > <select name="date1yy"> > <option value="1995-01-01" selected>1995</option> > > <select name="date2yy"> > <option value="2006-12-31" selected>2006</option> > > My SQL is : > > select * > from tablename > where title like ('%nith%') > and recall_date between > extract(year from date '1995-01-01') > and extract(year from date '2006-12-31') > order by recall_date > > How can I add the MONTH to be included in the between statement ? > If I select 1995 - 2006 it currently only returns rows up to > 2005-12-31 > > THANKS! > > > ---------------------------(end of > broadcast)--------------------------- > TIP 5: don't forget to increase your free space map settings >
Russell Smith wrote: > One wrote: > > Hi - I'd like to return search results based on a date range that is > > selected by the user : > > > > <select name="date1yy"> > > <option value="1995-01-01" selected>1995</option> > > > > <select name="date2yy"> > > <option value="2006-12-31" selected>2006</option> > > > > My SQL is : > > > > select * > > from tablename > > where title like ('%nith%') > > and recall_date between > > extract(year from date '1995-01-01') > > and extract(year from date '2006-12-31') > > order by recall_date > > > > How can I add the MONTH to be included in the between statement ? > > If I select 1995 - 2006 it currently only returns rows up to 2005-12-31 > > > > THANKS! > > > Try > > select * > from tablename > where title like ('%nith%') > and date_trunc('month',recall_date::timestamp) >= date_trunc('month','1995-01-01'::timestamp) > and date_trunc('month',recall_date::timestamp) <= date_trunc('month','2006-12-31'::timestamp) > order by recall_date > Fantastic. Thank you to Matthias and Russell - everything is working perfectly!
Syl wrote: >> Try >> >> select * >> from tablename >> where title like ('%nith%') >> and date_trunc('month',recall_date::timestamp) >= date_trunc('month','1995-01-01'::timestamp) >> and date_trunc('month',recall_date::timestamp) <= date_trunc('month','2006-12-31'::timestamp) >> order by recall_date >> Actually, that looks a lot like BETWEEN, which is even shorter :) select * from tablename where title like ('%nith%') and date_trunc('month',recall_date::timestamp) between date_trunc('month','1995-01-01'::timestamp) and date_trunc('month','2006-12-31'::timestamp) order by recall_date > Fantastic. > > Thank you to Matthias and Russell - everything is working perfectly! -- Alban Hertroys alban@magproductions.nl magproductions b.v. T: ++31(0)534346874 F: ++31(0)534346876 M: I: www.magproductions.nl A: Postbus 416 7500 AK Enschede // Integrate Your World //
Alban Hertroys wrote: > Syl wrote: > >> Try > >> > >> select * > >> from tablename > >> where title like ('%nith%') > >> and date_trunc('month',recall_date::timestamp) >= date_trunc('month','1995-01-01'::timestamp) > >> and date_trunc('month',recall_date::timestamp) <= date_trunc('month','2006-12-31'::timestamp) > >> order by recall_date > >> > > Actually, that looks a lot like BETWEEN, which is even shorter :) > > select * > from tablename > where title like ('%nith%') > and date_trunc('month',recall_date::timestamp) > between date_trunc('month','1995-01-01'::timestamp) > and date_trunc('month','2006-12-31'::timestamp) > order by recall_date > > > > Fantastic. > > > > Thank you to Matthias and Russell - everything is working perfectly! > Thank you for the accurate and detailed repsonses! All is working excellent.