Mysql 在查询中执行日期操作
我的数据库表包含Mysql 在查询中执行日期操作,mysql,sql,ruby-on-rails,sqlite,Mysql,Sql,Ruby On Rails,Sqlite,我的数据库表包含开始时间(键入日期时间)和持续时间(键入整数,表示小时) 我想执行一个查询,查找start\u time+duration早于time.now的所有记录 我可以在一个查询中运行添加操作和比较操作吗?还是我首先需要读取记录,将其转换为rails并在那里运行比较 伪代码如下所示: @surveys = Survey.find_by_sql("select * from surveys where start_time + duration < :now", :now =>
开始时间
(键入日期时间
)和持续时间
(键入整数
,表示小时)
我想执行一个查询,查找start\u time+duration
早于time.now
的所有记录
我可以在一个查询中运行添加操作和比较操作吗?还是我首先需要读取记录,将其转换为rails并在那里运行比较
伪代码如下所示:
@surveys = Survey.find_by_sql("select * from surveys where start_time + duration < :now", :now => Time.now)
@surveys=Survey.by_sql查找_(“从开始时间+持续时间<:now“,:now=>time.now的调查中选择*)
从技术上讲,是的,您可以按照自己的方式进行操作,但是您必须使用特定于数据库引擎的日期时间函数(您没有指定)如果您使用的是ms sql server,请将时间转换为浮点数,其基数为1.0=1天
挑选*
从你的桌子上
其中(CONVERT(FLOAT,start_time)+duration/24.0)应该可以得到您想要的。日期函数是特定于数据库的。您使用的是什么?例如:MySQL、PostgreSQL、SQLServer、Oracle等等?谢谢,实际上我想使用rails标准:sqlite用于开发,MySQL用于生产。在开始时执行加法start_time+duration并将其作为新值(例如end_time)存储在表中可能更有意义。那么我就不会是特定于数据库的,对吗?Sqlite没有内置的datetime数据类型(请参见此处:)。您是如何在sqlite数据库中存储start_time的,这与您的MySQL数据库相比如何?感谢Mark,可以在sqlite db中创建一个datetime类型的列,当我打印模式时,它仍然会声明它。在内部,它存储为关联数值。但据我所知,不可能运行数据库不特定的操作,如向其中添加小时(从不同列读取)。-1-并非所有的日子都是24小时长(取决于时区)。我会避免像瘟疫一样做任何类似的“数学”把戏,因为它们允许细微的错误。同意-我所见过的几乎每一个RDBMS都有稍微不同的处理日期/时间的方法。可能是应用程序中无法使DB独立的因素之一。