A-A+

Mysql拆分字符串查询

2009年03月27日 未分类 暂无评论 阅读 1 次

一个项目有数据格式如下

例如 1,2,3 把1、2、3的名称查询出来拼接一个字符串返回来,用的数据库是mysql, mysql的 function代码如下

view plaincopy to clipboardprint?
DELIMITER $$

DROP FUNCTION IF EXISTS `tms1`.`GetClassName` $$
CREATE FUNCTION `GetClassName`(f_string VARCHAR(15000)) RETURNS varchar(15000)
BEGIN

/* 判断字符串包含,的第一个位置*/
DECLARE THE_CNT INT(15) DEFAULT 1;

/* 班级编号*/
declare classId varchar(20) default '';

/* 返回的班级名称*/
DECLARE result varchar(15000) DEFAULT null;

/* 班级名称*/
DECLARE className varchar(50) DEFAULT '';

/* 字符串包含,的第一个位置*/
set THE_CNT = LOCATE(',',f_string);

/* 判断字符串包含,的第一个位置是否存在*/
while (THE_CNT >= 0) do

/* ,位置不存在的场合*/
if THE_CNT = 0 then

/* 班级编号的设置*/
set classId = f_string;

else

/* 字符串中获得班级编号*/
set classId = SUBSTRING_INDEX(SUBSTRING_INDEX(f_string, ',', 1), ',', -1);

end if ;

/* 根据班级编号获得班级名称*/
select (select name from class where id = classId) into className;

/* 返回班级编号的字符串为空的场合*/
if result is null then

/* 根据编号没有查询到班级名称的场合*/
if className is null then

/* 设置班级名称为空*/
set className = ' ';

end if;

/* 班级名称追加到字符串*/
set result = className;

else

/* 根据编号没有查询到班级名称的场合*/
if className is null then

/* 设置班级名称为空*/
set className = '  ';

end if;

/* 班级名称追加到字符串*/
set result = CONCAT(result,',',className);

end if;

/* ,位置不存在的场合*/
if THE_CNT = 0 then

/* 返回结果集*/
return result;

end if;

/* 截取传入的字符串*/
set f_string = right(f_string,length(f_string) - THE_CNT);

/* 字符串包含,的第一个位置*/
set THE_CNT = LOCATE(',',f_string);

/* 结束遍历*/
end while;

/* 返回结果集*/
return result;

END $$

DELIMITER ;

给我留言

Copyright © 浩然东方 保留所有权利.   Theme  Ality 07032740

用户登录