首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MYSQL中将字符串作为WHERE子句传递

如何在MYSQL中将字符串作为WHERE子句传递
EN

Stack Overflow用户
提问于 2012-04-16 22:48:35
回答 1查看 2.3K关注 0票数 0

我创建了以下字符串:

代码语言:javascript
复制
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%')

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

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

此sql位于MYSQL存储过程中。所以它只是普通的sql ..我将从C#、MVC3调用此存储过程

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-16 22:57:46

试试这个:

代码语言:javascript
复制
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语法。此外,要执行存储在字符串中的查询,必须使用PREPAREEXECUTE

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10176404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档