《Mysql應用mysql split函數(shù)用法實例》要點:
本文介紹了Mysql應用mysql split函數(shù)用法實例,希望對您有用。如果有疑問,可以聯(lián)系我們。
導讀:首先,大家要知道的是,在mysql中并沒有split函數(shù),需要自己寫.比如下面幾個mysql split函數(shù)的例子.例1,獲得按指定字符分割的字符串的...
首先,大家要知道的是,在mysql中并沒有split函數(shù),需要自己寫.MYSQL必讀
比如下面幾個mysql split函數(shù)的例子.
例1,獲得按指定字符分割的字符串的個數(shù):
?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 ;?
調(diào)用:
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 ;?
調(diào)用:func_get_split_string('abc||def||gh','||',2)
結果為def
?
例3,需求:A表中的一個字段值為1||2, 在select 時要通過和B字典表的關聯(lián)得到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數(shù)據(jù)庫中使用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實現(xiàn)字符串分割SPLIT函數(shù)的四種辦法MYSQL必讀
最后,通過幾個例子,仔細體會下mysql中split函數(shù)的實現(xiàn)與用法.MYSQL必讀
先設置:SET GLOBAL log_bin_trust_function_creators = 1;
1,函數(shù)func_splitStringTotal:將字符串按指定方式分割,并計算單元總數(shù)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,函數(shù)func_splitString:將字符串按指定方式分割,獲取指定位置的數(shù)
代碼:
?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函數(shù)的用法,請參考:在mysql中實現(xiàn)split函數(shù)的幾種辦法 .
就介紹這些吧,希望借助以上的例子,大家可以實現(xiàn)更好的mysql split函數(shù),也歡迎分享更多的精彩實例.MYSQL必讀
歡迎參與《Mysql應用mysql split函數(shù)用法實例》討論,分享您的想法,維易PHP學院為您提供專業(yè)教程。
轉載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/7429.html