2015-10-05 17 views
6

Elixir'deki bir ODBC veritabanından bir sayı almaya çalışıyorum. Sonuçumun geri geldiğini görebiliyorum, ancak değeri nasıl çıkaracağımı bilmiyorum.Elixir'de tuple ile listeden tamsayı nasıl elde edilir?

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

{: seçili, [ 'COUNT'], [{ '182'}]}

Nasıl bir tamsayı olarak dışarı 182 alabilirim?

Ben iç başlığın başlamıştı var yakın:

hd(rows) 

{ '182'} Bu özel durumda ilgilenen olmadığını bağlı olarak farklı olası çözüm vardır

+0

Gereksinim duyduğunuz şey için işe yarayıp yaramayacağını bilmiyorum ama aynı zamanda Ecto'ya da bakmak isteyebilirsiniz: https://github.com/elixir-lang/ecto –

cevap

5

veya daha geniş bir yaklaşımla.

Bu özel örnekte, rows öğesinin tek bir değere sahip tek bir tuple sahip bir liste olması beklenir, değeri çıkarmak için desen eşleştirmelerinden yararlanabilirsiniz. Bu noktadan count itibaren

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

'182' eşleşir. Ancak, "182"

"182" == '182' 
false 

olarak İksir belgelerinde açıklandığı daha '182' farklı olduğuna dikkat edin, "182" oysa '182' is a char-list String olduğunu. Bu nedenle, String.to_integer'u doğrudan başarısız olacağı için kullanamazsınız.

String.to_integer(count) 
** (ArgumentError) argument error 
    :erlang.binary_to_integer('182') 

Sen List.to_integer(count) kullanmak veya alternatif bir Dizesi'ne dönüştürmek için ihtiyacınız sonra tam sayıya attı.

List.to_integer(count) 
182 

String.to_integer(to_string(count)) 
182 

Bu çözelti tuple (sorgu sonucunda birden fazla değer verir anlamına gelir) birden fazla değer ihtiva halinde doğrudan uygulanabilir olmayabilir. Ancak ihtiyaçlarınızı karşılayabileceğiniz bir başlangıç ​​noktasıdır.

+2

'List.to_integer (count) 'ı kullanabilirsiniz. 'doğrudan listeden tamsayıya dönüştürmek için. –

+0

Teşekkürler @ JoséValim. Cevabı güncelledim. –

İlgili konular