活动记录sql查询中的数学函数? (pow,sqrt等)

时间:2009-06-30 17:51:33

标签: sql ruby-on-rails activerecord

Active Record无法识别POW方法或SQRT中的findfind_by_sql等常见SQL函数。我该如何解决这个问题?似乎没有文献: - (

2 个答案:

答案 0 :(得分:1)

ActiveRecord支持最常见的calculation functionalities。 对于任何其他高级用法,您始终可以通过以下方式自定义select语句的值:

find(:all, :select => "COUNT(*)")

就个人而言,我还没有找到一个例子,将ActiveRecord(和SQL)用于以下某个语句是有意义的。

SELECT POW(9, 6)
531441
SELECT POW(2, -3)
0.125
SELECT SQRT(65536)
256

恕我直言,Ruby数学库它可能是一个更好的选择。

您是否有使用ActiveRecord无法创建的POW或SQRT查询的真实世界用法示例?

答案 1 :(得分:0)

我认为ActiveRecord根本不直接支持标量函数。因为确保提交给数据库的查询简洁并产生尽可能小的记录集,所以组功能肯定是回归,因为它很有意义。

另一方面,Scalars并没有提供太多的好处,而且目前还没有我知道可以提供它的AR语法。根据需要在模型中执行计算可能会有实际好处,因为它会减少数据库服务器上的负载(尽管只是极少量)。

在整个平台集中建立一个公共集也很棘手:如果你的DBMS没有实现POW(),那么(我相信它本身不是ANSI首选的函数名)你会期望AR到什么办?

我认为如果你真的想让你的DBMS为你做标量函数,你将不得不提供它们作为SQL字符串的一部分,正如你所提到的,find_by_sql,指定选择列表或类似的东西。但我会把功能放在你的模型中。