2015-10-05 11 views
6

私はElixirのODBCデータベースからカウントを取得しようとしています。私は私の結果が戻ってくるのを見ることができます、しかし、私は値を抽出する方法を知らない。私は整数として182を出すにはどうすればよい:{選択し、[ 'COUNT']、[{ '182'}]}エリクサーのタプルでリストから整数を抽出するには?

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

私は内側のタプルになったしまった最も近い:あなたは、この特定のケースに興味があるかどうかによって、または別の可能な解決策はあります

hd(rows) 

{「182」}

+0

あなたが必要とするものがうまくいくかどうかわかりませんが、Ectoを見たいかもしれません:https://github.com/elixir-lang/ecto –

答えて

5

をより広範なアプローチで。

この特定の例では、rowsは1つの値を持つ単一のタプルを持つリストであると予想されているため、パターンマッチングを利用して値を抽出できます。この時点countから

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

'182'と一致します。しかし、"182"

"182" == '182' 
false 

としてはエリクサーのマニュアルに記載されているよりも'182'が異なっていることに注意してください、"182"に対し'182' is a char-listは文字列です。したがって、失敗するので直接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 

この溶液をタプルが(クエリは結果として複数の値を返す手段)複数の値が含まれている場合に直接適用できないかもしれません。しかし、それはあなたのニーズに適応できる出発点です。

+2

'List.to_integer(count) 'それをリストから整数に直接変換します。 –

+0

Thanks @JoséValim。私は答えを更新しました。 –