我正在尝试从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'}
根据您对这一特定案例或更广泛的方法感兴趣,有不同的可能解决方案.
在此特定实例中,如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)
如果元组包含多个值(这意味着查询返回多个值作为结果),则此解决方案可能无法直接应用.然而,这是一个可以适应您需求的起点.
| 归档时间: |
|
| 查看次数: |
1044 次 |
| 最近记录: |