Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
Elixir 将'sum'结果强制转换为EXTO中的整数_Elixir_Ecto - Fatal编程技术网

Elixir 将'sum'结果强制转换为EXTO中的整数

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

我在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中为整数输入返回一个
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)
)