我正在尝试从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'}
答案 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
如果元组包含多个值(这意味着查询返回多个值作为结果),则此解决方案可能无法直接应用。然而,它是您可以适应您需求的起点。