使用LIKE %%从ejabberd模块查询

时间:2016-01-25 10:07:20

标签: erlang ejabberd

我在ejabberd模块中有这行代码,它工作正常:

case catch ejabberd_odbc:sql_query(Server,["select COUNT(*) as total from spool where username='",IdUsername,"' AND xml LIKE '%message from%' AND xml LIKE '%chat%';"]) of
            {selected, [<<"total">>], [[Totale]]} ->
                Count = binary_to_list(Totale);
            _ -> Count = "0"
    end,

如果我转换它:

LIKE '%chat%';

用这个:

LIKE '%type=\'chat\'%';

我收到错误,有什么想法吗?还是有其他方式只能获得聊天消息?

1 个答案:

答案 0 :(得分:1)

由于您在Erlang字符串中输入此内容,因此Erlang escape sequences适用。特别是,\'是单引号'的转义序列。 (这在原子内部更有用,它们用单引号分隔。)

您可以在Erlang shell中试用它,并看到"\'""'"是等效的:

1> "\'".
"'"
2> "\'" =:= "'".
true

要在字符串中包含实际的反斜杠,请使用另一个反斜杠转义它:

"\\'"

在你的情况下,那将是:

LIKE '%type=\\'chat\\'%';