《Mysql应用mysql split函数用法实例》要点:
本文介绍了Mysql应用mysql split函数用法实例,希望对您有用。如果有疑问,可以联系我们。
			           
导读:首先,大家要知道的是,在mysql中并没有split函数,需要自己写.比如下面几个mysql split函数的例子.例1,获得按指定字符分割的字符串的...
        
                           
    
        
    
    
     
     
  首先,大家要知道的是,在mysql中并没有split函数,需要自己写.MYSQL必读
比如下面几个mysql split函数的例子.
例1,获得按指定字符分割的字符串的个数:
 MYSQL必读
DELIMITER $$  
  
DROP FUNCTION IF EXISTS `sims`.`func_get_split_string_total`$$  
  
CREATE DEFINER=`root`@`localhost` FUNCTION `func_get_split_string_total`(  
f_string varchar(1000),f_delimiter varchar(5)  
) RETURNS int(11)  
BEGIN  
  declare returnInt int(11);  
  if length(f_delimiter)=2  then  
     return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')))/2;  
  else      
     return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));  
  end if;  
END$$  
  
DELIMITER ; 
调用:
func_get_split_string_total('abc||def||gh','||')
结果为3  
 
例2,得到第i个分割后的字符串.
 MYSQL必读
DELIMITER $$  
  
DROP FUNCTION IF EXISTS `sims`.`func_get_split_string`$$  
  
CREATE DEFINER=`root`@`localhost` FUNCTION `func_get_split_string`(  
f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8  
BEGIN  
  declare result varchar(255) default '';  
  set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1));  
  return result;  
END$$  
  
DELIMITER ; 
调用:func_get_split_string('abc||def||gh','||',2)
结果为def
 
例3,需求:A表中的一个字段值为1||2, 在select 时要通过和B字典表的关联得到a,b
 MYSQL必读
CREATE DEFINER=`root`@`localhost` FUNCTION `getDictName`(v_str varchar(100)) RETURNS varchar(100) CHARSET utf8  
BEGIN    
  DECLARE i int(4);  
  DECLARE dictCode varchar(100);  
  DECLARE dictName varchar(100);  
  DECLARE returnStr varchar(100);   
  
  set i = 1;  
  set returnStr = '';        
    
  if(v_str is null or length(v_str)=0) then  
       return returnStr;  
  else  
    
  while i<=func_get_split_string_total(v_str,'||')  
  do  
     set dictCode = func_get_split_string(v_str,'||',i);    
     select names into dictName from sims_dd_dict where code = dictCode;    
     set returnStr = concat(returnStr,',',dictName);  -- 这里要用中文的逗号,否则导出EXCEL的时候会串行,因为程序中是以逗号分隔的  
  set i = i+1;  ---//(脚本学堂 www.jbxue.com 编辑整理)
  end while;  
     
  set returnStr = subString(returnStr,2);    
  return returnStr;  
     
  end if;  
END$$ 
在mysql数据库中使用split,有时要考虑接收返回值的问题,下面来看两个例子.MYSQL必读
例1,mysql使用split接收返回值.
 MYSQL必读
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_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 ;$$
例2:
 MYSQL必读
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 ;$$  
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 ;$$
参考文档:mysql实现字符串分割SPLIT函数的四种办法MYSQL必读
最后,通过几个例子,仔细体会下mysql中split函数的实现与用法.MYSQL必读
先设置:SET GLOBAL log_bin_trust_function_creators = 1;
1,函数func_splitStringTotal:将字符串按指定方式分割,并计算单元总数MYSQL必读
代码:
 MYSQL必读
DELIMITER $$ 
CREATE FUNCTION `func_get_splitStringTotal`( 
f_string varchar(10000),f_delimiter varchar(50) 
) RETURNS int(11) 
BEGIN 
return 1+(length(f_string) - length(replace(f_string,f_delimiter,''))); 
END$$ 
DELIMITER ;
2,函数func_splitString:将字符串按指定方式分割,获取指定位置的数
代码:
 MYSQL必读
DELIMITER $$ 
DROP function IF EXISTS `func_splitString` $$ 
CREATE FUNCTION `func_splitString` 
( f_string varchar(1000),f_delimiter varchar(5),f_order int) 
RETURNS varchar(255) CHARSET utf8 
BEGIN
declare result varchar(255) default ''; 
set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1)); 
return result; 
END$$ 
SELECT func_splitString('1,2,3,4,5,6,7',',',1);
3,过程splitString 将字符串分割,并放到临时表tmp_split中
代码:
 MYSQL必读
DELIMITER $$ 
DROP PROCEDURE IF EXISTS `splitString` $$ 
CREATE PROCEDURE `splitString` 
(IN f_string varchar(1000),IN f_delimiter varchar(5))
BEGIN 
declare cnt int default 0; 
declare i int default 0; 
set cnt = func_split_TotalLength(f_string,f_delimiter); 
DROP TABLE IF EXISTS `tmp_split`; 
create temporary table `tmp_split` (`val_` varchar(128) not null) DEFAULT CHARSET=utf8;
while i < cnt 
do 
set i = i + 1; 
insert into tmp_split(`val_`) values (func_split(f_string,f_delimiter,i)); 
end while; 
END$$ 
call splitString('a,s,d,f,g,h,j',','); 
SELECT * from tmp_split;
更多有关mysql split函数的用法,请参考:在mysql中实现split函数的几种办法 .
就介绍这些吧,希望借助以上的例子,大家可以实现更好的mysql split函数,也欢迎分享更多的精彩实例.MYSQL必读
欢迎参与《Mysql应用mysql split函数用法实例》讨论,分享您的想法,维易PHP学院为您提供专业教程。
转载请注明本页网址:
http://www.vephp.com/jiaocheng/7429.html