《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,f_delimiter,'')));?
????? 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,f_delimiter,'')));
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_delimiter,f_order)),f_delimiter,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,b,c,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,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,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_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;?
?end while;?
???
?set returnstr = substring(returnstr,2);??
?return returnstr;?
???
?end if;?
end$$?
歡迎參與《Mysql實例mysql split函數多種實現方法》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/7430.html