Rails 的日期大于给定日期查询

问题描述 投票:0回答:6

尝试搜索上映日期大于今天日期的电影

 Movie.where('release > ?', Date.today)
ActiveRecord::StatementInvalid: Mysql::ParseError: You have an error in your SQL     syntax;    check the manual that corresponds to your MySQL server version for the right syntax to use near 'release > '2011-09-25')' at line 1: SELECT `movies`.* FROM `movies` WHERE (release > '2011-09-25')
sql ruby-on-rails-3
6个回答
146
投票

轨道 3+ :

Movie.where('release > ?', DateTime.now)

Pre Rails 3

Movie.where(['release > ?', DateTime.now])

40
投票

在最新版本的 Rails 中,您可以执行以下操作:

User.where(created_at: 3.days.ago..Time.now)

请参阅此处的其他一些示例:https://stackoverflow.com/a/24150094


17
投票

更新

Rails 核心团队决定暂时恢复此更改,以便更详细地讨论它。请参阅此评论此PR了解更多信息。

我留下我的答案仅用于教育目的。


Rails 6.1(已恢复)中用于比较的新“语法”

Movie.where('release >': DateTime.now)

这里是 PR 链接,您可以在其中找到更多示例。


16
投票

在 Ruby 2.7 中,你可以尝试这个:

License.where(expiration: Time.zone.today..)
SELECT "licenses".* FROM "licenses" WHERE "licenses"."expiration" >= '2021-07-06 15:12:05'

4
投票

Ruby beginless/endless 范围也可以用作开箱即用的解决方案:

Post.where(id: 1..)

=>

Post Load (0.4ms)  SELECT "posts".* FROM "posts" WHERE "posts"."id" >= $1  [["id", 1]]

Post.where(id: ..9)

=>

Post Load (0.3ms)  SELECT "posts".* FROM "posts" WHERE "posts"."id" <= $1  [["id", 9]]

Post.where(id: ...9)

=>

Post Load (0.3ms)  SELECT "posts".* FROM "posts" WHERE "posts"."id" < $1  [["id", 9]]

注:

id
替换为您的日期列
release

将值替换为

Date.today


0
投票
  Movie.where(release: 3.days.ago..)
© www.soinside.com 2019 - 2024. All rights reserved.