Personally I don't share your view that it's a bug. Omitting the time results in midnight by default so this screws between because there's no time between 00:00:00 and 00:00:00.
Are you having operational issues here or are you simply fishing for bugs? WHERE `transaction_date` = DATE(datetime) or WHERE `transaction_date` = (new column stored as date) On Thu, May 23, 2013 at 9:55 PM, Daevid Vincent <dae...@daevid.com> wrote: > I just noticed what I consider to be a bug; and related, has this been > fixed > in later versions of MySQL? > > We are using: > mysql Ver 14.12 Distrib 5.0.92, for portbld-freebsd8.1 (amd64) using 5.2 > > If you use BETWEEN and the same date for both parts (i.e. you want a single > day) it appears that the operator isn't smart enough to consider the full > day in the cases where the column is a DATETIME > > > http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_be > tween > > WHERE `transaction_date` BETWEEN '2013-04-16' AND '2013-04-16' > > I actually have to format it like this to get results > > WHERE `transaction_date` BETWEEN '2013-04-16 00:00:00' AND '2013-04-16 > 11:59:59' > > As it appears that in the first instance it defaults the time to 00:00:00 > always, as verified by this: > > WHERE `transaction_date` BETWEEN '2013-04-16' AND '2013-04-16 11:59:59' > > So, I think it's probably safe to assume that if someone is using the > BETWEEN on datetime columns, their intent more often than not is to get the > full 24 hour period, not the 0 seconds it currently pulls by default. > > I also tried these hacks as per the web page above, but this doesn't yield > results either > > WHERE `transaction_date` BETWEEN CAST('2013-04-16' AS DATE) AND > CAST('2013-04-16' AS DATE) > WHERE `transaction_date` BETWEEN CAST('2013-04-16' AS DATETIME) AND > CAST('2013-04-16' AS DATETIME) > > This one works, but I fail to see how it's any more beneficial than using a > string without the CAST() overhead? > > WHERE `transaction_date` BETWEEN CAST('2013-04-16 00:00:00' AS DATETIME) > AND > CAST('2013-04-16 11:59:59' AS DATETIME) > > Or is there some other magical incantation that is supposed to be used > (without me manually appending the time portion)? >