一个mysql存储过程中用replace出现的问题,请高手指教

zzuiezhangqihui 2010-03-04 02:52:45
两个表
CREATE TABLE `test2` (
`c1` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk

CREATE TABLE `test3` (
`str` varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
test2
c1

"13"
"2"
"14"
"4"
"5"
"6"
"7"
"8"
"9"
"10"
"11"
"12"
"13"
"14"

test3 内容
str
会员你好,你*天的请假已经到期,请了解。

存储过程:
DELIMITER$$
drop PROCEDURE if EXISTS proc_t1$$
create PROCEDURE proc_t1()
begin
declare _str varchar(100);
select str into _str from test3;
-- select _str;
-- set _str='会员你好,你*天的请假已经到期,请了解。';
select replace(_str,'*',convert(c1,char(4)))
from test2;
end $$
DELIMITER ;

call proc_t1;的结果为:
"会员你好,你13天的请假已经到期,请了解。"
"会员你好,你13天的请假已经到期,请了解。"
"会员你好,你13天的请假已经到期,请了解。"
"会员你好,你13天的请假已经到期,请了解。"
"会员你好,你13天的请假已经到期,请了解。"
"会员你好,你13天的请假已经到期,请了解。"
"会员你好,你13天的请假已经到期,请了解。"
"会员你好,你13天的请假已经到期,请了解。"
"会员你好,你13天的请假已经到期,请了解。"
"会员你好,你13天的请假已经到期,请了解。"
"会员你好,你13天的请假已经到期,请了解。"
"会员你好,你13天的请假已经到期,请了解。"
"会员你好,你13天的请假已经到期,请了解。"
"会员你好,你13天的请假已经到期,请了解。"
而不是我想要的结果:
"会员你好,你13天的请假已经到期,请了解。"
"会员你好,你2天的请假已经到期,请了解。"
"会员你好,你14天的请假已经到期,请了解。"
"会员你好,你4天的请假已经到期,请了解。"
"会员你好,你5天的请假已经到期,请了解。"
"会员你好,你6天的请假已经到期,请了解。"
"会员你好,你7天的请假已经到期,请了解。"
"会员你好,你8天的请假已经到期,请了解。"
"会员你好,你9天的请假已经到期,请了解。"
"会员你好,你10天的请假已经到期,请了解。"
"会员你好,你11天的请假已经到期,请了解。"
"会员你好,你12天的请假已经到期,请了解。"
"会员你好,你13天的请假已经到期,请了解。"
"会员你好,你14天的请假已经到期,请了解。"

不知道为什么。

...全文
295 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzuiezhangqihui 2010-03-13
  • 打赏
  • 举报
回复
可以直接
select replace(b.str,'*',convert(a.c1,char(4)))
from test2 a, test3 b ;
的出来想要的结果。
zzuiezhangqihui 2010-03-06
  • 打赏
  • 举报
回复
解决方法已经知道,但是不知道这个什么原因。
懒得去死 2010-03-06
  • 打赏
  • 举报
回复
环境有问题? 我的测试结果:





select * from test2;
select * from test3;
call proc_t1;




query result(3 records)
c1
13
2
3

query result(1 records)
str
会员你好,你*天的请假已经到期,请了解。


query result(3 records)
replace(_str,'*',convert(c1,char(4)))
会员你好,你13天的请假已经到期,请了解。
会员你好,你2天的请假已经到期,请了解。
会员你好,你3天的请假已经到期,请了解。


我的版本为:5.1.36-community-log
ACMAIN_CHM 2010-03-06
  • 打赏
  • 举报
回复
引用
解决方法已经知道,但是不知道这个什么原因。
至少提供你的解决方法,这样别人才能分析是什么原因造成的啊!
flairsky 2010-03-05
  • 打赏
  • 举报
回复
你还不如直接拼接字符串……

行数不多,也可以做个游标
ACMAIN_CHM 2010-03-04
  • 打赏
  • 举报
回复
直接试一下
select replace('会员你好,你*天的请假已经到期,请了解。','*',convert(c1,char(4))) from test2;

看结果是否是你要求的?

56,685

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧