requête où date = date.today avec Rails, MySQL et Active Record
Je vois dans l'Enregistrement Actif docs, vous pouvez faire une requête pour une date en utilisant plus de /moins de comparaison. Cependant, si vous souhaitez sélectionner d'où date = date.aujourd'hui, ou dois-je la requête où la date est plus qu'hier et moins que demain?
Comme vous pouvez le voir, je suis en train de faire exactement ce que dans la suite de requêtes et d'interrogation où Date = aujourd'hui, il retourne un ensemble vide
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
Est-ce la bonne façon de requête pour la date d'aujourd'hui ou j'ai loupé quelque chose?
source d'informationauteur jdkealy
Vous devez vous connecter pour publier un commentaire.
Je pense que c'est une DUP de cette question:
Comment sélectionner une date à partir d'une colonne datetime?
Je suis sûr que cela fonctionne avec MySQL et PostgreSQL, mais je ne suis pas sûr si c'est un standard SQL.
Wikipedia semble penser
TO_DATE
serait la norme:http://en.wikipedia.org/wiki/SQL#Date_and_time
Qui n'a pas fonctionné pour moi dans PostgreSQL.
Je crois que le post suivant est plus pertinente pour vous
Rails ActiveRecord Trouver /Recherche par Date
Dans votre cas, lorsque vous effectuez une recherche avec date avec activerecord vous pourriez voulez prendre le fuseau horaire de conversions en considération.
Lorsque vous utilisez la méthode ci-dessous
Subscription.where("DATE(created_at) = ?", Date.today).count
il utilise Mysql fonction de la DATE d'analyser la date et vous obtiendrez de temps UTC enregistré dans Mysql par activerecord. Si votre application rails est à l'aide d'un autre fuseau horaire, vous obtiendrez des résultats faux.
La façon correcte d'utiliser ce serait évitez d'utiliser toutes les fonctions SQL, et au lieu d'utiliser une gamme.
Subscription.where(created_at: Date.today.beginning_of_day..Date.today.end_of_day)
Cela permettrait d'extraire les résultats avec le fuseau horaire conversions appliquée.
S'il vous plaît laissez-moi savoir que vous quelqu'un a une meilleure solution pour cela.
Pour moi tout fonctionne comme ceci: