Rails + ActiveRecord:比较日期

时间:2017-10-09 09:35:56

标签: ruby-on-rails ruby postgresql datetime activerecord

我有一个已生成的文档,比如2017-10-03 15:02:47

然后我有这个Rails / SQL查询(如果我通过Rails运行它或直接通过SQL控制台,结果是相同的):

SELECT * FROM table where needed_column <= '2017-10-03';

此查询不会返回2017-10-03 15:02:47上生成的文档。但是,如果我确实运行了这个查询:

SELECT * FROM table where needed_column <= '2017-10-03 23:59:59';

然后我得到了所需的文件(在2017-10-03 15:02:47上生成)。

要解决此问题,我可以手动为查询添加时间(23:59:59),但这不是一个非常优雅的解决方案。

我正在使用Rails 5,AR,PostgreSQL - 是否有更好的方法来解决此问题,而不是手动将时间戳添加到查询中?

谢谢

2 个答案:

答案 0 :(得分:1)

您的needed_column可能正在保存时间戳(日期和时间)。正如您已经发现的那样,您需要将其与其他时间戳进行比较,或使用needed_column

来投射::date
Model.where("needed_column::date <= '2017-10-03'")

这将产生:

SELECT table.* FROM table WHERE (needed_column::date <= '2017-10-03')

答案 1 :(得分:1)

在Rails中尝试: -

Model.where(needed_column: [Time.now.at_beginning_of_day, Time.now.end_of_day])

或者作为sql查询: -

SELECT * FROM table_name WHERE needed_column BETWEEN '2017-10-09 00:00:00 UTC' AND '2017-10-09 23:59:59 UTC'