mysql没有split函数, 网上提供的那个函数看上去就不好理解。substring_index 套2次。 看的晕头转向。
后来索性自己手撸一个。
CREATE DEFINER=`root`@`%` FUNCTION `splitStr`(orgstr VARCHAR(1000), spch VARCHAR(5), num int) RETURNS varchar(1000) CHARSET utf8
BEGIN
DECLARE i INT DEFAULT 1; -- 指针索引
DECLARE s INT DEFAULT 1; -- 当前开始位
DECLARE n INT DEFAULT 0; -- 当前第几个
DECLARE len INT DEFAULT 0; -- 当前第几个
SET len = LENGTH(orgstr);
-- return orgstr;
WHILE i <= len
DO
if substr(orgstr,i,1) = spch then -- 查看当前值是否与 分隔符相同
set n = n+1;
if n = num or i = len then
-- return CONCAT_WS(" ", s , i-1,n);
return substr(orgstr,s,i-s);
end if;
set s = i+1;
end if ;
SET i = i + 1;
END WHILE;
return substr(orgstr,s,i-s);
END
用法
select
-- build_name,unit_name, household_name,
splitStr(address, '-', 1), -- 3
splitStr(address, '-', 2) , -- 2
splitStr(address, '-', 3) ,-- 505
address -- 3-2-505
from `user` where address like '%-%-%' limit 2