Elixir 将'sum'结果强制转换为EXTO中的整数
我在Ecto中有一个查询,它包含一列包含整数的和。我使用MySQL作为数据库 e、 g 通过在片段中使用MySQL的Elixir 将'sum'结果强制转换为EXTO中的整数,elixir,ecto,Elixir,Ecto,我在Ecto中有一个查询,它包含一列包含整数的和。我使用MySQL作为数据库 e、 g 通过在片段中使用MySQL的CONVERT函数,我成功地实现了预期的结果,但它似乎不是最健壮的方法: result = Repo.one( from v in Vote, where: [post_id: 1], select: fragment("CONVERT(?, SIGNED)", sum(v.direction)) ) 有更好的方法吗?SUM在MySQL中为整数输入返回一个DE
CONVERT
函数,我成功地实现了预期的结果,但它似乎不是最健壮的方法:
result = Repo.one(
from v in Vote,
where: [post_id: 1],
select: fragment("CONVERT(?, SIGNED)", sum(v.direction))
)
有更好的方法吗?
SUM
在MySQL中为整数输入返回一个DECIMAL
值
SUM()和AVG()函数为精确值参数(整数或十进制)返回一个十进制值,为近似值参数(FLOAT或DOUBLE)返回一个双精度值
因此,您有两种选择:要么像您已经做的那样将值转换为带符号的,要么使用
Decimal将十进制值转换为整数。Elixir中的to_integer/1
。MySQL中的SUM返回整数输入的十进制值
SUM()和AVG()函数为精确值参数(整数或十进制)返回一个十进制值,为近似值参数(FLOAT或DOUBLE)返回一个双精度值
因此,您有两种选择:或者像您已经做的那样将值转换为带符号的,或者使用Decimal将十进制值转换为整数。要在Elixir中转换为整数/1
。您可以使用以下方法在数据库级别转换为整数:
可以使用以下命令在数据库级别强制转换为整数:
如果希望它是整数,为什么不首先将其作为整数存储在数据库中?另外,请显示您的模式文件,用于投票
十进制。要获得整数(结果)
?@mudasobwa,方向
列是一个整数。我不知道为什么结果是十进制的。模式posted@Dogbert理想情况下,我希望在查询时进行类型转换,以避免映射到结果。是的,在迁移中它也声明为整数。我检查了数据库本身,它是一个整数。也许它是mysql的东西……如果你想让它成为整数,为什么不首先在数据库中存储为整数呢?另外,请显示您的模式文件,用于投票十进制。要获得整数(结果)
?@mudasobwa,方向
列是一个整数。我不知道为什么结果是十进制的。模式posted@Dogbert理想情况下,我希望在查询时进行类型转换,以避免映射到结果。是的,在迁移中它也声明为整数。我检查了数据库本身,它是一个整数。也许这是mysql的东西…你应该提到这可能不是旧的外星库的功能你应该提到这可能不是旧的外星库的功能
schema "votes" do
field :direction, :integer
belongs_to :user, Linklet.User
belongs_to :link, Linklet.Link
timestamps()
end
result = Repo.one(
from v in Vote,
where: [post_id: 1],
select: fragment("CONVERT(?, SIGNED)", sum(v.direction))
)
result = Repo.one(
from v in Vote,
where: [post_id: 1],
select: type(sum(v.direction), :integer)
)