使用 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\'%';