如何从Elixir中的元组中提取列表中的整数?

时间:2015-10-05 21:31:29

标签: elixir

我正在尝试从Elixir中的ODBC数据库中获取计数。我可以看到我的结果回来,但是,我不知道如何提取价值。

{:ok, conn} = :odbc.connect('DSN=mydsn;UID=myuid;PWD=mypwd', [])
{:selected, _colNames, rows} = :odbc.sql_query(conn, 'select count(*) from mytable')
  

{:已选中,['COUNT'],[{'182'}]}

如何以整数形式获得182?

我最接近的是获得内部元组:

hd(rows)
  

{ '182'}

1 个答案:

答案 0 :(得分:5)

根据您对这一特定案例或更广泛的方法感兴趣,有不同的可能解决方案。

在此特定实例中,由于rows应该是具有单个元组的单个元组的列表,因此您可以利用模式匹配来提取值。

{:selected, _, [{count}]} = {:selected, ['COUNT'], [{'182'}]}

此时count将与'182'匹配。但请注意,'182'"182"

不同
"182" == '182'
false

正如Elixir文档中所述,'182' is a char-list"182"是一个字符串。因此,您无法直接使用String.to_integer,因为它会失败。

String.to_integer(count)
** (ArgumentError) argument error
    :erlang.binary_to_integer('182')

首先需要使用List.to_integer(count)或者将其转换为字符串,然后转换为整数。

List.to_integer(count)
182

String.to_integer(to_string(count))
182

如果元组包含多个值(这意味着查询返回多个值作为结果),则此解决方案可能无法直接应用。然而,它是您可以适应您需求的起点。