Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在查询中执行日期操作_Mysql_Sql_Ruby On Rails_Sqlite - Fatal编程技术网

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独立的因素之一。