【发布时间】:2021-05-10 00:00:33
【问题描述】:
我想使用 MySQL 的“SOUNDS LIKE”查询一个字段。
SQL:
WHERE field SOUNDS LIKE "blah"
如何用柴油框架查询这个?
我想到了
.filter(sql("field SOUNDS LIKE ???"))
但是如何通过正确的转义在这里注入 (bind()) 我的值?
或者有没有更好的方法来使用不受支持的 SQL 进行过滤?
EDIT1:
我找到了 infix_operator 宏,但它不起作用。找不到SqlType、TypedExpressionType 和 infix_operator 宏。但根据 Github,它就在那里:
use diesel::sql_types::SqlType;
use diesel::expression::TypedExpressionType;
use diesel::expression::AsExpression;
use diesel::expression::Expression;
diesel::infix_operator!(SoundsLike, " SOUNDS LIKE ");
fn sounds_like<T, U, ST>(left: T, right: U) -> SoundsLike<T, U::Expression>
where
T: Expression<SqlType = ST>,
U: AsExpression<ST>,
ST: SqlType + TypedExpressionType,
{
SoundsLike::new(left, right.as_expression())
}
【问题讨论】:
-
.filter(sql("field SOUNDS LIKE 'blah'"))? -
该值来自用户输入(=变量)。认为这很明显:-)
标签: mysql rust rust-diesel