Rails ActiveRecord - 如何在两个日期之间获取记录

use*_*621 22 sql postgresql activerecord ruby-on-rails

我在数据库中有两个日期列 - from_dateto_date.

例:

  • from_date:2012-09-10
  • to_date:2012-09-30
  • today:2012-09-13

如果today日期介于from_date和之间,我需要获取所有记录to_date.如何在SQL查询中执行此操作?

如果我已经加载了相应的记录,我可以很容易地决定,如果今天的日期介于from_date和之间to_date,但我不知道,如何直接从数据库中获取这些记录.

Pau*_*lgo 47

检查范围条件下的Rails指南:

Client.where(created_at: (Time.now.midnight - 1.day)..Time.now.midnight)
Run Code Online (Sandbox Code Playgroud)

这将产生以下SQL:

SELECT * FROM clients WHERE (clients.created_at BETWEEN '2008-12-21 00:00:00' AND '2008-12-22 00:00:00')
Run Code Online (Sandbox Code Playgroud)

  • 这实际上并没有回答问题.他想知道日期何时介于两个单独列的值之间,这是列在两个日期之间的位置. (17认同)

Sal*_*lil 22

data = ModelName.where("today >= from_date AND today <= to_date")
Run Code Online (Sandbox Code Playgroud)

  • 这个答案实际上比保罗更普遍.Paulo的查询假设您在两个日期之间有一个字段(在他的答案中为`created_at`).如果我想看看今天是否在`start_date`和`end_date`之间怎么办?保罗的回答不能这样做. (6认同)

M.P*_*ran 7

你可以像这样使用:

Data = Model.where("date(now()) between from_date and to_date")
Run Code Online (Sandbox Code Playgroud)


Gan*_*war 5

data = ModelName.find(:all, :conditions => "today >= from_date and today <= to_date")
Run Code Online (Sandbox Code Playgroud)


Tim*_*m K 5

一种安全而简单的方法是:

Model.where(':date BETWEEN from_date AND to_date', date: Date.current)
Run Code Online (Sandbox Code Playgroud)

  • 我知道......我更喜欢传递散列,因为它更容易理解并且读起来像一个句子。至于依赖数据库获取当前日期,是的,您可以,但是您是在数据库时区中进行查询,而不是在 Rails 应用程序/用户会话的时区中进行查询。 (2认同)