Search code examples
ruby-on-rails-3activerecord

query where date = Date.today with Rails, MySQL, and Active Record


I see in the Active Record docs, you can query for a date using a greater than / less than comparison. However, what if you want to select where date = Date.today or must I query where date is greater than yesterday and less than tomorrow?

As you can see, I'm doing exactly that in the following queries and querying where Date = today returns an empty set

1.9.3p286 :096 > Subscription.where("created_at = ?", Date.today).count
   (0.5ms)  SELECT COUNT(*) FROM `subscriptions` WHERE (created_at = '2013-01-18')
 => 0 

vs.

1.9.3p286 :098 > Subscription.where("expiration_date < ? AND expiration_date > ?", Date.today + 1, Date.today - 1).count
   (0.4ms)  SELECT COUNT(*) FROM `subscriptions` WHERE (expiration_date < '2013-01-19' AND expiration_date > '2013-01-17')
 => 1 

Is this the proper way to query for today's date or am I missing something?


Solution

  • I think this is a DUP of this question:

    How to select date from datetime column?

    Subscription.where("DATE(created_at) = ?", Date.today).count
    

    I'm pretty sure this works in MySQL and PostgreSQL, but I'm not sure if it's a SQL standard.

    Wikipedia seems to think TO_DATE would be the standard: http://en.wikipedia.org/wiki/SQL#Date_and_time

    That didn't work for me in PostgreSQL though.