【发布时间】:2015-09-25 23:44:52
【问题描述】:
我有一个关于检索数据库数据的问题。
我有一个模型Notification,它有标准的Rails 属性created_at。
您可能知道,虽然是ActiveSupport::TimeWithZone 访问对象,但该属性确实拥有超精确的值,您可以通过强制转换to_i 甚至to_f 来访问它
所以现在我想将where 子句写入Notification 模型并查找在特定时间后创建的通知。但由于可能在同一秒内创建了多个通知,我希望查询更精确,所以我尝试编写这样的子句:
Notification.where('created_at > ?', timestamp)
它似乎不起作用。
如何转换 created_at 值才能将其与时间戳进行比较?
【问题讨论】:
-
它没有超精确的值。
.to_iReturns the value of time as an integer number of seconds since the Epoch。它仍然以秒为单位,而不是毫秒。 -
to_f 呢?它是否具有更精确的价值?
-
这取决于您选择的数据库是否存储毫秒。
-
将日期时间转换为时间戳(反之亦然)不会使其更精确,最终它是同一回事。对某事调用 to_f 也不会使其更精确。 2.0 并不比 2 更精确。两者都等于 2。
-
我使用 PosggreSQL,日期字段的分辨率似乎为 1 微秒。 postgresql.org/docs/9.1/static/datatype-datetime.html。但我仍然无法弄清楚如何以这种精度进行查询
标签: ruby-on-rails ruby postgresql activerecord