0

我创建了以下字符串:

set l_project_name = concat("UPPER(a.project_name) like UPPER ('%",projectName,"%')");
set l_project_type = concat(" OR UPPER(a.project_type) like UPPER('%",projectType,"%')");
set l_project_description = concat(" OR UPPER(a.project_description) like UPPER('%",projectDescription,"%')");

set l_full_search_clause = concat(l_project_name ,l_project_type, l_project_description); 

字符串的结果: l_full_search_clause 是: UPPER(a.project_name) like UPPER('%order%')

我有一个选择子句,我需要使用我创建的包含这个 where 子句的这个字符串。所以,我有以下内容: select * from projects where l_full_search_clause

但是,当然,MYSQL 按原样读取 l_full_search_clause 而不是变量。我如何告诉 MYSQL 条件是一个变量字符串?

这个 sql 在 MYSQL 存储过程中.. 所以它只是普通的 sql .. 我从 C#、MVC3 调用这个存储过程

4

1 回答 1

1

试试这个:

SET @query = "SELECT * FROM projects WHERE ";

SET @l_project_name = CONCAT("a.project_name LIKE '%", projectName, "%'");
SET @l_project_type = CONCAT(" OR a.project_type LIKE '%", projectType, "%'");
SET @l_project_description = CONCAT(" OR a.project_description LIKE '%", projectDescription, "%'");

SET @l_full_search_clause = CONCAT(@l_project_name, @l_project_type, @l_project_description); 

SET @query = CONCAT(@query, @l_full_search_clause);

PREPARE stmt FROM @query;
EXECUTE stmt;

我相信你必须使用@var变量的语法。此外,要执行存储在字符串中的查询,您必须使用PREPAREand EXECUTE

而且您不必UPPER在字符串上使用。默认情况下,MySQL 不区分大小写地比较字符串。您可以通过查看字段的排序规则类型来确保这一点。ci_那些代表“不区分大小写”。

于 2012-04-16T14:57:45.910 回答