1

从我的 ASP.NET 应用程序中,我想向 MySQL 发出这个查询

SELECT * FROM responses WHERE field_id LIKE '3\_%'

换句话说,我正在寻找第二个字符是下划线文字字符的记录。

模型设计器生成的代码如下所示:

    public virtual RiskAnalysis.responsesDataTable GetResponseGroupForAnalysis(int raid, string fieldid) {
    this.Adapter.SelectCommand = this.CommandCollection[2];
    this.Adapter.SelectCommand.Parameters[0].Value = ((int)(raid));
    if ((fieldid == null)) {
        throw new global::System.ArgumentNullException("fieldid");
    }
    else {
        this.Adapter.SelectCommand.Parameters[1].Value = ((string)(fieldid));
    }
    RiskAnalysis.responsesDataTable dataTable = new RiskAnalysis.responsesDataTable();
    this.Adapter.Fill(dataTable);
    return dataTable;
}

如果我这样调用这个函数:

string filter_string = @"3\_%";    
ResponsesAdapter.GetResponseGroupForAnalysis(10, filter_string);

MySQL 日志报告查询如下所示:

SELECT     *
FROM         responses
WHERE     (ra_id = 10) AND (field_id LIKE '3\\_%')

换句话说,我知道我在这里遗漏了一些非常明显的东西,但是我如何在查询中放置 MySQL 的转义反斜杠而不用 C#(un)帮助转义它?

4

2 回答 2

0

在标准 SQL 中,您可以使用ESCAPE关键字设置转义字符。

MySQL 在此遵循标准 SQL,如LIKE谓词文档所述:

像这样:

...

field_id LIKE '3\_%' ESCAPE '\' 

这将使通配符_被视为字符串文字。

希望这是你所问的。

于 2012-11-07T11:36:28.290 回答
0

好的,似乎(通过实验 - 很高兴听到解释或文档链接)在 MySQL(field_id LIKE '3\_%');中等同于(field_id LIKE '3\\_%');并且两者都会找到 field_id 以“3_”开头的记录。让我自己很困惑 - 感谢 Mahmoud 和 René 试图理解我的意思!

于 2012-11-08T11:48:53.850 回答