1

谁能解释一下,当我的表中有数据时,为什么我的数据库查询返回空?

Event.all

返回

...
Event Load (0.3ms)  SELECT "events".* FROM "events"
 => #<ActiveRecord::Relation [#<Event id: 1, created_at: "2013-08-01 12:27:36", updated_at: "2013-08-01 12:27:36"> 
...

ETC,

尽管

Event.where(created_at: Date.today)

给我

Event Load (0.3ms)  SELECT "events".* FROM "events" WHERE "events"."created_at" = '2013-08-01'
 => #<ActiveRecord::Relation []> 

一切都在哪里?

4

3 回答 3

3

该字段created_at 是 DateTime,但您将其与 Date(没有时间)进行比较。您需要将该字段转换为日期以获取今天创建的所有事件:

Event.where('CAST(events.created_at as DATE) = ?', Date.today)

注意: 语法可能会根据您的数据库系统(PostGreSQL / MySQL 等)而改变。

希望这可以帮助!

有用的链接:

于 2013-08-01T13:56:50.593 回答
0

问题是 created_at: 属性(假设它是在迁移时间戳中创建的)也存储时间。所以它永远不会等于一个简单的日期。您最好的选择是解析日期然后进行比较。

于 2013-08-01T13:59:30.637 回答
0

如果您查看您的实际查询 -

SELECT "events".* FROM "events" WHERE "events"."created_at" = '2013-08-01'

您正在寻找带有created_at equals 2013-08-01的记录,但实际上,您正在尝试搜索的记录 -created_at字段 equals 2013-08-01 12:27:36

更改您的语句以搜索created_at包含 2013-08-01

于 2013-08-01T13:57:04.643 回答