日前,统计数据的时候发现需要字符串分隔,MySql中并没有类似Java的split函数,但是我们可以利用length()函数、replace() 2个函数创建一个自定义的split函数,sql很简单,该函数定义也是DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging的错误解决方案之一。 split函数:
代码语言:javascript复制CREATE FUNCTION `split`(
inputStr varchar(1000),seperatorStr varchar(50)
) RETURNS int(11)
######这两行告诉MySql该函数不会修改数据(尤其对数据库权限只有自读权限的账户是非常有用的)
READS SQL DATA
DETERMINISTIC
######
BEGIN
#####返回替换前长度减去用''替换后的长度得到seperatorStr的个数。
return (length(inputStr) - length(replace(inputStr,seperatorStr,'')));
END
split函数测试脚本,返回#的个数:
代码语言:javascript复制SELECT splitTermTotal('1#2#3','#')
2
length(str)函数测试,该函数返回str的长度:
代码语言:javascript复制SELECT LENGTH('1#2#3')
5
replace(strContent, oldStr,newStr)函数测试,用于将strContent串中的oldStr全部替换为newStr:
代码语言:javascript复制select replace('1#2#3','#','')
123