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

Edw*_*ler 6 elixir

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

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

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

如何以整数形式获得182?

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

hd(rows)
Run Code Online (Sandbox Code Playgroud)

{ '182'}

Sim*_*tti 5

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

在此特定实例中,如rows预期的是具有单个元组的单个元组的列表,您可以利用模式匹配来提取值.

{:selected, _, [{count}]} = {:selected, ['COUNT'], [{'182'}]}
Run Code Online (Sandbox Code Playgroud)

从这一点开始count就会匹配'182'.但请注意,'182'不同于"182"

"182" == '182'
false
Run Code Online (Sandbox Code Playgroud)

正如Elixir文档中所解释的那样,'182'是一个char列表,"182"而是一个String.因此,您无法String.to_integer直接使用,因为它会失败.

String.to_integer(count)
** (ArgumentError) argument error
    :erlang.binary_to_integer('182')
Run Code Online (Sandbox Code Playgroud)

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

List.to_integer(count)
182

String.to_integer(to_string(count))
182
Run Code Online (Sandbox Code Playgroud)

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

  • 您可以使用`List.to_integer(count)`将它直接从列表转换为整数. (2认同)