在mysql中好像并没有提供split的函数,即使有那么该如何接收返回值呢?数组吗
.
反正我只能间接的实现,如下:
DELIMITER $$;
DROP FUNCTION IF EXISTS `func_getSplitCount`$$
CREATE FUNCTION `func_getSplitCount`(
f_string varchar(1000),f_delimit varchar(5)
) RETURNS int(11)
BEGIN
return 1+(length(f_string) - length(replace(f_string,f_delimit,'')));
END$$
DELIMITER ;$$
DELIMITER $$;
DROP FUNCTION IF EXISTS `func_getSplitString`$$
CREATE FUNCTION `func_getSplitString`(
f_string varchar(1000),f_delimit varchar(5),f_order int
) RETURNS varchar(255)
BEGIN
declare result varchar(255) default '';
set result = reverse(substring_index(reverse(substring_index(f_string,f_delimit,f_order)),f_delimit,1));
return result;
END$$
DELIMITER ;$$
-- 以下是利用这个split的一个片段
....
set loopCount = func_getSplitCount(orString,splitDelimit);
WHILE(loopCount > 0) DO
set temp_orWhere = concat(temp_orWhere,' or cIdxMapCd = \'',func_getSplitString(orString,splitDelimit,loopCount),'\'');
set loopCount = loopCount - 1;
END WHILE;
....
恩就是这样,至少我没有更好的办法.
利用length函数和replace计算出split的个数,然后利用substring_index和reverse函数取出指定位置的内容,最后利用循环,不断的去拿.
分享到:
2009-04-10 11:37
浏览 6222
评论
3 楼
moistrot
2010-10-26
postgres牛逼!postgres是好多商业数据库的前身!
2 楼
mislay
2010-07-27
e.... 估计名字好听吧
1 楼
pig345
2010-07-15
mysql 存储过程 function 有个大问题——不支持返回游标(或数组)!另外function里面还不能使用动态SQL!这两点,基本上把正常的function功能给废了!
另外没有split函数(这更加雪上加霜,导致连用function返回长字符串传递数组这种绕弯实现都成为不可能——返回了不能用函数套函数的方式分割成数组,就不能直接写在WHERE里面,基本废了!)
我感觉MySQL始终就不是一个完整的数据库,真不明白为什么还这么流行???难道大家都是简单地把MySQL当平板文件+SQL引擎使用?
反之,几年前功能就已经堪比商业数据库的postgres在功能不断完善的同时,确远没有mysql流行!
(当年mysql3就不支持一些数据库的基本功能(事务、存储过程)、现在快到6了,号称全都支持了,不过明显功能缩水!相比另外一个免费开源数据库postgres明显是个半残)