使用 LIKE %% 从 ejabberd 模块查询
Query from ejabberd module with LIKE %%
我在 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\'%';
我收到一个错误,有什么想法吗?或者有其他方法只获取聊天消息?
由于您是在 Erlang 字符串中键入此内容,因此适用 Erlang escape sequences。特别是,\'
是仅用于单引号 '
的转义序列。 (这在用单引号分隔的原子内部更有用。)
你可以在 Erlang shell 中尝试一下,看看 "\'"
和 "'"
是等价的:
1> "\'".
"'"
2> "\'" =:= "'".
true
要在字符串中包含实际的反斜杠,请使用另一个反斜杠将其转义:
"\'"
在你的情况下,那将是:
LIKE '%type=\'chat\'%';
我在 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\'%';
我收到一个错误,有什么想法吗?或者有其他方法只获取聊天消息?
由于您是在 Erlang 字符串中键入此内容,因此适用 Erlang escape sequences。特别是,\'
是仅用于单引号 '
的转义序列。 (这在用单引号分隔的原子内部更有用。)
你可以在 Erlang shell 中尝试一下,看看 "\'"
和 "'"
是等价的:
1> "\'".
"'"
2> "\'" =:= "'".
true
要在字符串中包含实际的反斜杠,请使用另一个反斜杠将其转义:
"\'"
在你的情况下,那将是:
LIKE '%type=\'chat\'%';