【发布时间】:2012-01-04 15:42:07
【问题描述】:
我的数据库表包含start_time(输入date time)和duration(输入integer,表示小时数)。
我想执行查询以查找所有start_time + duration 在Time.now 之前的记录。
我可以在一个查询中运行添加操作和比较操作吗?还是我首先需要读取记录,将其转换为 rails 并在那里运行比较?
伪代码如下:
@surveys = Survey.find_by_sql("select * from surveys where start_time + duration < :now", :now => Time.now)
【问题讨论】:
-
日期函数是特定于数据库的。你在用什么?
-
例如:MySQL、PostgreSQL、SQLServer、Oracle等...?
-
谢谢,实际上我想使用 rails 标准:sqlite 用于开发,MySQL 用于生产。可能在开始时执行添加 start_time + duration 并将其作为新值(例如 end_time)存储在表中更有意义。那么我不会是特定于数据库的,对吧?
-
Sqlite 没有内置的日期时间数据类型(请参见此处:sqlite.org/datatype3.html)。您如何将 start_time 存储在您的 sqlite 数据库中,这与您的 MySQL 数据库相比如何?
-
谢谢马克,可以在 sqlite db 中创建一个类型为 datetime 的列,当我打印模式时它仍然声明它。在内部,它存储为亲和性 NUMERIC。但据我了解,没有机会运行与数据库无关的操作,例如向其添加小时数(从不同的列读取)。
标签: mysql sql ruby-on-rails sqlite