2015-10-05 4 views
6

Sto cercando di ottenere un conteggio da un database ODBC in elisir. Riesco a vedere il mio risultato tornare, tuttavia, non so come estrarre il valore.Come estrarre il numero intero dalla lista con tupla in elisir?

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

{: selezionato, [ 'count'], [{ '182'}]}

Come faccio ad avere 182 come un intero?

Il più vicino ho ottenuto è stato ricevendo il tuple interno:

hd(rows) 

{ '182'}

+0

Non so se funzionerebbe per quello che ti serve ma potresti anche voler dare un'occhiata a Ecto: https://github.com/elixir-lang/ecto –

risposta

5

Ci sono diverse soluzioni possibili a seconda se siete interessati a questo caso specifico o in un approccio più ampio.

In questo caso specifico, poiché rows è una lista con una singola tupla con un singolo valore, è possibile sfruttare la corrispondenza del modello per estrarre il valore.

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

Da questo punto count corrisponderà '182'. Tuttavia, si ricorda che '182' è diverso da quello "182"

"182" == '182' 
false 

Come spiegato nella documentazione Elixir, '182' is a char-list mentre "182" è una stringa. Pertanto non è possibile utilizzare direttamente String.to_integer in quanto non riuscirà.

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

Innanzitutto è necessario utilizzare List.to_integer(count) oppure convertirlo in una stringa, poi gettati in un numero intero.

List.to_integer(count) 
182 

String.to_integer(to_string(count)) 
182 

Questa soluzione può non essere applicabile direttamente se il tupla contiene più di un valore (che significa la query restituisce più di un valore come risultato). Tuttavia è un punto di partenza che puoi adattare alle tue esigenze.

+2

Puoi usare 'List.to_integer (count) 'per convertirlo direttamente dalla lista in numero intero. –

+0

Grazie a JoséValim. Ho aggiornato la risposta. –

Problemi correlati