2015-10-05 43 views
6

我想從Elixir的ODBC數據庫中獲得一個計數。我可以看到我的結果回來,但是,我不知道如何提取價值。如何從Elixir中的元組列表中提取整數?

{: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

我不知道它是否可以滿足您的需求,但您可能還想看看Ecto:https://github.com/elixir-lang/ecto –

回答

5

有根據您是否有興趣在此特定情況下,不同的解決方案或採取更廣泛的方式。

在這個特定的例子中,因爲rows預計是一個具有單個值的單個元組的列表,所以您可以利用模式匹配來提取該值。

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

從這點count將匹配'182'。但是,請注意,'182'不同於"182"

"182" == '182' 
false 

由於藥劑文檔中解釋,'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 

該溶液可能不適用於直接如果元組包含一個以上的值(這意味着該查詢返回多於一個的值作爲結果)。不過,這是一個起點,可以適應您的需求。

+2

您可以使用'List.to_integer(count) '將其從列表直接轉換爲整數。 –

+0

謝謝@JoséValim。我更新了答案。 –