Mysql实例mysql split函数多种实现方法

《Mysql实例mysql split函数多种实现方法》要点:
本文介绍了Mysql实例mysql split函数多种实现方法,希望对您有用。如果有疑问,可以联系我们。

导读:例1,mysql split函数代码. delimiter $$drop function if exists `f_split_varchar`$$create function `f_split_varchar`(f_strin...

例1,mysql split函数代码.
 MYSQL教程

delimiter $$MYSQL教程

drop function if exists `f_split_varchar`$$MYSQL教程

create
    function `f_split_varchar`(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,''))); 
      end if; MYSQL教程

    end$$MYSQL教程

delimiter ;MYSQL教程

下面继续通过几个例子,学习mysql split函数的实现办法.MYSQL教程

想在mysql里把一段用固定符号分隔的字符串,按分隔符分别列出来.
就是一个典型的split应用,但是mysql却没有自带这个函数,可以通过自建函数来解决.

相关链接:mysql实现字符串分割SPLIT函数的四种办法MYSQL教程

例1:
 MYSQL教程

delimiter $$
create function `func_get_split_string_total`(
f_string varchar(1000),f_delimiter varchar(5)
) returns int(11)
begin
  return 1+(length(f_string) - length(replace(f_string,'')));
end$$
delimiter ;
 
 
delimiter $$
create 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_order)),1));
  return result;
end$$
delimiter ;
 

必要设置下参数:
set global log_bin_trust_function_creators = 1;MYSQL教程

测试下以上mysql split函数的用法,分析下实现原理(脚本学堂 www.jbxue.com 编纂整理):
 MYSQL教程

create table "t" (
    ->   "t1" varchar(100) default null,
    ->   "t2" int(11) default null
    -> ) engine=myisam default charset=utf8;
 
mysql> insert into t(t1,t2) values('a,b,c,d',1);
query ok,1 row affected (0.00 sec)
 
mysql> insert into t(t1,t2) values('a b c d',2);
query ok,1 row affected (0.00 sec)
 
mysql> select * from t;
+---------+------+
| t1      | t2   |
+---------+------+
| a,d |    1 |
| a b c d |    2 |
+---------+------+
2 rows in set (0.00 sec)

首先,用func_get_split_string_total函数得到符合匹配的数量.
 MYSQL教程

mysql> select func_get_split_string_total(t1,',') from t where t2=1;
+-------------------------------------+
| func_get_split_string_total(t1,') |
+-------------------------------------+
|        4 |
+-------------------------------------+
1 row in set (0.00 sec)

然后,用func_get_split_string得出想要的字符串
 MYSQL教程

mysql> select func_get_split_string(t1,1) from t where t2=1;
+---------------------------------+
| func_get_split_string(t1,1) |
+---------------------------------+
| a    |
+---------------------------------+
1 row in set (0.00 sec)
 
mysql> select func_get_split_string(t1,2) from t where t2=1;
+---------------------------------+
| func_get_split_string(t1,2) |
+---------------------------------+
| b    |
+---------------------------------+
1 row in set (0.00 sec)
 
mysql> select func_get_split_string(t1,3) from t where t2=1;
+---------------------------------+
| func_get_split_string(t1,3) |
+---------------------------------+
| c    |
+---------------------------------+
1 row in set (0.00 sec)
 
mysql> select func_get_split_string(t1,4) from t where t2=1;
+---------------------------------+
| func_get_split_string(t1,4) |
+---------------------------------+
| d    |
+---------------------------------+
1 row in set (0.00 sec)
 

当然,这只是个思路,如果你想把所有字符串都列出来,可以写个过程,在其中循环下也是可以的.MYSQL教程

为了更好的掌握mysql split函数的实现办法,大家可以研究一下下面的几个例子.MYSQL教程

例1,自定义mysql split函数实现 获取按指定字符分割的字符串的个数:
 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,'')))/2; 
  else     
     return 1+(length(f_string) - length(replace(f_string,''))); 
  end if; 
end$$ 
 
delimiter ; 
 

测试:
func_get_split_string_total('abc||def||gh','||')
结果为3 
 
例2,mysql split自定义函数得到第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_order int) returns varchar(255) charset utf8 
begin 
  declare result varchar(255) default ''; 
  set result = reverse(substring_index(reverse(substring_index(f_string,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; 
 end while; 
   
 set returnstr = substring(returnstr,2);  
 return returnstr; 
   
 end if; 
end$$ 

欢迎参与《Mysql实例mysql split函数多种实现方法》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。

相关文章

MySQL 死锁 是指两个或多个事务互相等待对方持有的锁,从而导...
在MySQL中,InnoDB引擎通过Next-Key Locking技术来解决幻读问...
在数据库事务管理中,Undo Log 和 Redo Log 是两种关键日志,...
case when概述 sql语句中的case语句与高级语言中的switch语句...
其实很简单,只是为了忘记,做个记录,用的时候方便。 不管是...
1.进入服务,找到mysql服务,在属性里找到mysql的安装路径 2...