其中t.date属性小于当前年份的Sql

时间:2012-01-16 21:09:30

标签: sql ruby-on-rails-3 postgresql

在我的Rails 3应用程序中,我试图通过学校名称和与当年相关的毕业日期查找当前学生。我可以为没有毕业日期的用户成功找到(见下文),但我想搜索毕业日期属性小于或大于当前年份的用户。仅供参考,我正在使用PostgreSQL。

我正在使用的字段设置如下:

t.string :high_school
t.date :hs_grad_year

以下是我目前工作的发现:

<%= pluralize(Profile.where(:high_school => "#{@highschool.name}").where("hs_grad_year IS NOT NULL").count, "person") %>

3 个答案:

答案 0 :(得分:1)

你想要.where("hs_grad_year < extract(year from current_date)")

在Postgres中,current_date是当前日期(yyyy-mm-dd),而extract函数只提取该日期的一部分。您可以在Postgres here中阅读有关日期和时间函数的更多信息。

答案 1 :(得分:1)

Profile.
  where(:high_school => @highschool.name).
  where("hs_grad_year < ? OR hs_grad_year > ?", Date.today.year, Date.today.year)

答案 2 :(得分:1)

您的代码存在一些问题(从数据库获取记录应该在控制器中完成,而不是在视图中,并且您使用高中名称作为外键而不是id字段,例子),但要回答你的问题:

Profile.where %'
    high_school = ? AND
    EXTRACT(year FROM hs_grad_year) < EXTRACT(year FROM current_date)
  ',
  @highschool.name