【问题标题】:Elixir / Ecto / Postgres trying to get integer from query but get char list instead?Elixir / Ecto / Postgres 试图从查询中获取整数但获取字符列表?
【发布时间】:2017-05-27 02:06:38
【问题描述】:

这似乎是世界上最简单的事情,但我试图从 ecto 查询返回一个整数:

iex(10)> num = Polo.Repo.all(from n in Polo.Account.Number, select: max(n.account))
[debug] QUERY OK source="account_numbers" db=3.0ms queue=0.1ms
SELECT max(a0."account") FROM "account_numbers" AS a0 []
[7024184]

iex(11)> IO.inspect(num)
[7024184]
[7024184]

iex(12)> IO.puts(num)
** (ArgumentError) argument error
   (stdlib) :io.put_chars(:standard_io, :unicode, [[7024184], 10])

iex(12)> num + 1
** (ArithmeticError) bad argument in arithmetic expression
    :erlang.+([7024184], 1)

正确的数字实际上是 7024184,但由于某种原因,它没有作为整数返回。它似乎是一个字符列表。

任何帮助将不胜感激!

运行最新的 Elixir 1.4.4

【问题讨论】:

  • 在 Elixir 中,charlist 只是一个整数列表。

标签: elixir ecto


【解决方案1】:

Repo.all 总是返回一个列表。由于您选择的是整数,因此您会返回一个整数列表。

如果只想获取一个值,可以使用Repo.one

num = Polo.Repo.one(from n in Polo.Account.Number, select: max(n.account))
# num should be just the integer `7024184` now

【讨论】:

  • 哇,好简单!感谢您的快速回复!
猜你喜欢
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 2018-03-01
  • 2018-04-14
  • 2017-06-20
  • 1970-01-01
  • 2017-12-09
  • 1970-01-01
相关资源
最近更新 更多