Sorry, that was meant to be; WHERE (new column stored as date) = '2013-04-16'
On Thu, May 23, 2013 at 10:16 PM, Andrew Moore <eroomy...@gmail.com> wrote: > 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)? >> > >