Are all the results (2012, 12, 10) and earlier? Maybe it's only comparing the dates and not the times for some reason (don't know why). In that case, since you're using strict < (rather than <=), it would make sense that no results would be later than (2012, 12, 10). Anthony
On Friday, August 19, 2011 2:52:59 AM UTC-4, Luis Goncalves wrote: > > Doing database queries on datetime.datetime fields seems broken. Here's an > example: > > I have a database with a table 'transEntry' which includes a 'datetime' > field: > > db.define_table('itemEntry', > * Field('dateTime','datetime'),* > Field('upc', 'string'), > Field('description', 'string'), > Field('storeNumber', 'integer'), > Field('terminalNumber', 'integer'), > Field('transactionNumber', 'integer'), > Field('operatorNumber', 'integer'), > Field('quantity', 'integer'), > Field('price', 'double'), > Field('action', 'integer'), > Field('sequenceNumber', 'integer')) > > > I do a search based on other fields, and it works fine: > > first_search = db((db.transEntry.storeNumber==store_num) & > > (db.transEntry.terminalNumber==lane_num)).select(orderby=db.transEntry.dateTime) > len(first_search) > >> 5213 > > Let's look at one of the results: > > In [173]: ex = first_search[524].dateTime > In [174]: ex > Out[174]: datetime.datetime(2010, 12, 11, 17, 50, 55) > > Now try to find a subset of the original query, entries antecedent to ex : > > > In [183]: broken_search = db( (db.transEntry.dateTime < ex) & > > (db.transEntry.storeNumber==store_num) & > > (db.transEntry.terminalNumber==lane_num) ).select( > orderby=db.transEntry.dateTime) > > In [184]: len(gar2) > Out[184]: 270 > > ?? Why are there only 270, we were expecting 523 of them?? > > Let's take a closer look: > > In [186]: gar2[1].dateTime > Out[186]: datetime.datetime(2010, 12, 10, 10, 55, 39) > > In [187]: gar2[2].dateTime > Out[187]: datetime.datetime(2010, 12, 10, 10, 56, 19) > > In [189]: gar2[269].dateTime > *Out[189]: datetime.datetime(2010, 12, 10, 22, 40, 26)* > > In [190]: ex > Out[190]: datetime.datetime(*2010, 12, 11, 17, 50, 55*) > > ?? For some reason, the closest result found is almost 24 hours away > from 'ex' ?? > > *?? Why didn't it find this one :* > > In [191]: *gar[523].dateTime* > Out[191]: *datetime.datetime(2010, 12, 11, 17, 49, 37)* > > I can't understand what's happening! It seems that comparisons of datetime > fields in db queries just don't work correctly? > > If anyone can explain/fix this, it will be much appreciated!! > > Thanks! > > Luis. >