sums返回String,仅与postgresql一起使用

时间:2013-09-12 01:42:25

标签: mysql ruby-on-rails-3 postgresql activerecord

我正在将数据库从mysql迁移到postgres。根据postgres文档,迁移本身还可以。

现在,我正在修复我们特定的mysql查询。

在某些方面,我们现在有这样的事情:

select(%(
  SUM(CASE WHEN income THEN value ELSE 0 END) AS rents,
  SUM(CASE WHEN not income THEN value ELSE 0 END) AS expenses
))

在mysql中,它是sum(if(incomes, value, 0))等,它按预期工作。

使用PG,它返回一个字符串而不是数字。

我已经检查了数据库并且数据类型是正确的。

除了演员to_dto_f

,我该怎么办?

编辑:完整的查询:

SELECT 
 SUM(CASE WHEN income THEN value ELSE 0 END) AS rents,
 SUM(CASE WHEN not income THEN value ELSE 0 END) AS expenses
 FROM "transactions"
 WHERE "transactions"."type" IN ('Transaction')
 AND "transactions"."user_id" = 1
 AND "transactions"."paid" = 't'
 AND (transactions.date between '2013-09-01' and '2013-09-30')
 LIMIT 1

1 个答案:

答案 0 :(得分:3)

据我所知,使用.to_f.to_i或其他任何答案 - Rails PostGres适配器似乎坚持认为一切都是String,除非它是ActiveRecord模型。

请参阅:connection.select_value only returns strings in postgres with pg gem

我并不特别赞同这一点,但正如俗话所说,“按预期工作”。