我有这段代码:
case catch ejabberd_odbc:sql_query(
Server,
["select COUNT(*) as total from users "
"where username='", IdUsername, "'"]) of
{selected, [<<"total">>], [{Totale}]} ->
io:format(Totale);
_ ->
io:format("err")
end,
但始终打印“err”到控制台,但如果我使用它:
Result = ejabberd_odbc:sql_query(Server, ["select COUNT(*) as total from users where username='", IdUsername, "';"]),
io:format(Result),
我有这个输出:
{badarg,[{io,format,[<0.42.0>,{selected,[<<"total">>],[[<<"1">>]]},[]], []},{mod_http_offline,create_message,3,[{file,"mod_http_offline.erl"}, {line,35}]},{ejabberd_hooks,safe_apply,3,[{file,"src/ejabberd_hooks.erl"}, {line,382}]},{ejabberd_hooks,run1,3,[{file,"src/ejabberd_hooks.erl"}, {line,329}]},{ejabberd_sm,route,3,[{file,"src/ejabberd_sm.erl"}, {line,111}]},{ejabberd_local,route,3,[{file,"src/ejabberd_local.erl"}, {line,112}]},{ejabberd_router,route,3,[{file,"src/ejabberd_router.erl"}, {line,75}]},{lists,foreach,2,[{file,"lists.erl"},{line,1336}]}]}
我可以看到这个:
{selected,[<<"total">>],[[<<"1">>]]}
如果我使用“total”而不是&lt;&lt;“total”&gt;&gt;相同的错误在一个案例中,那么问题是什么?我怎么能得到int数?
答案 0 :(得分:1)
您的模式匹配是:
{selected, [<<"total">>], [{Totale}]}
您匹配的术语是:
{selected,[<<"total">>],[[<<"1">>]]}
也就是说,该元组中的第三个元素是一个包含二进制列表的列表,但是您要匹配包含元组的列表。
您可以通过将变量名称放在所需值的位置来获取该值,如下所示:
{selected,[<<"total">>],[[Totale]]}
将二进制分配给变量Totale
。要将其转换为整数,请使用binary_to_integer/1
:
Count = binary_to_integer(Totale)