2 ycc707080327 ycc707080327 于 2015.06.18 11:04 提问

mysql 创建存储过程时,select语句 like中引用变量如何引用?

附代码:
delimiter//

DROP PROCEDURE IF EXISTS M_DNAME //
CREATE PROCEDURE M_DNAME
(MONTH VARCHAR(2))
SELECT INCOME.CID,COUNT(*) COUNTS FROM INCOME WHERE TIME LIKE '______MONTH%';
//

delimiter ;
如上 like中的MONTH是变量 如何插入进去?

3个回答

iversoner
iversoner   2015.06.18 11:11

你这是想要做什么?没明白。。

ycc707080327
ycc707080327 嗯 。。就是like里面想引用变量 该如何引用 比如 %123% 中间这个123 想成为变量而不是固定的值
2 年多之前 回复
ycg514230
ycg514230   Rxr 2015.06.18 11:12

CREATE PROCEDURE M_DNAME (MONTH VARCHAR(2))
BEGIN
SET @month = MONTH
SET @sql = CONCAT("SELECT INCOME.CID,COUNT(*) COUNTS FROM INCOME WHERE TIME LIKE ", @month);
PREPARE sql_real FROM @sql;
EXECUTE sql_real;
END

希望能帮到你。

ycc707080327
ycc707080327 回复帘卷西风: 嗯 MONTH就是参数 但是 想在like语句中引用 比如 like ‘%123%’ 中 123的部分是变量MONTH而不是固定的123
2 年多之前 回复
ycg514230
ycg514230 回复ycc707080327: 存储过程不是就可以带参数传进去吗
2 年多之前 回复
ycc707080327
ycc707080327 这个存储过程目的就是 统计某月份的次数 我的代码中把MONTH换成具体的数字,比如05结果就是对的。但想把05换成一个变量 而不是固定的。。怎么引入变量呢? 求大神解答~~~~
2 年多之前 回复
ycc707080327
ycc707080327 不行欸 有错误提示 说是语法错误=。=
2 年多之前 回复
ycg514230
ycg514230 就是先拼好字符串,然后利用mysql提供的PREPARE和EXECUTE达到目标。
2 年多之前 回复
albertbush
albertbush   2015.06.18 11:18
 delimiter//

DROP PROCEDURE IF EXISTS M_DNAME //
 CREATE PROCEDURE M_DNAME
 (MONTH VARCHAR(2))
 SELECT INCOME.CID,COUNT(*) COUNTS FROM INCOME WHERE TIME LIKE CONCAT(MONTH ,'%');
 //

delimiter ;

ycc707080327
ycc707080327 回复不是阿尔伯特: 嗯 这个我也试了 能通过但查询结果不对,我又把MONTH换成‘05’结果就对了 。崩溃。。。。
2 年多之前 回复
albertbush
albertbush 回复albertbush: 额,重新看了一下题目,是不是CONCAT('____' ,MONTH ,'%'),几个下划线自己控制哈
2 年多之前 回复
albertbush
albertbush 回复ycc707080327: 首先,CONCAT(MONTH ,'%')='05%',所以,那个like就相当于 LIKE '05%'
2 年多之前 回复
albertbush
albertbush 回复ycc707080327: MONTH不是你的变量么?
2 年多之前 回复
ycc707080327
ycc707080327 可以运行通过!但是执行了结果好像不对诶。 这个存储过程目的就是 统计某月份的次数 我的代码中把MONTH换成具体的数字,比如05结果就是对的。但想把05换成一个变量 而不是固定的。。怎么引入变量呢?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片