婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Mysql通過存儲過程分割字符串為數組

Mysql通過存儲過程分割字符串為數組

熱門標簽:昆明電信400電話辦理 溫州瑞安400電話怎么申請 南昌高頻外呼系統哪家公司做的好 電話機器人市場趨勢 電銷機器人 行業 俄國地圖標注app 淄博400電話申請 電銷機器人各個細節介紹 百度地圖標注后不顯示

分割字符串為數組需要用到 三個mysql 的函數 :

REVERSE(str) 返回顛倒字符順序的字符串str。

SUBSTRING_INDEX(str,delim,count)

返回從字符串str的第count個出現的分隔符delim之后的子串。如果count是正數,返回最后的分隔符到左邊(從左邊數) 的所有字符。如果count是負數,返回最后的分隔符到右邊的所有字符(從右邊數)。

REPLACE(str,from_str,to_str)

返回字符串str,其字符串from_str的所有出現由字符串to_str代替。

通過三個函數的組合使用做到分割字符串為數組的功能。

首先寫兩個函數

1,獲得所有以“某個符號“分割的字符串的個數,函數內容如下

(將sql代碼復制放在navicat中執行即可)

DELIMITER $$
CREATE DEFINER=`root`@`%` FUNCTION `func_get_split_string_total`(
f_string varchar(1000),f_delimiter varchar(5)
) RETURNS int(11)
BEGIN
 -- Get the total number of given string.
 return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));
END$$
DELIMITER ;

2、按分割取出字符串

(將sql代碼復制放在navicat中執行即可)

DELIMITER $$
CREATE DEFINER=`root`@`%` FUNCTION `func_get_split_string`(
f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8
BEGIN
 -- Get the separated number of given string.
 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 ;

然后再寫一個存儲過程進行組合使用這兩個函數,輸入需要分割的字符串 ,和分隔符,輸出 按某某符號分割后的數組

(將sql代碼復制放在navicat中執行即可)

DELIMITER $$
CREATE PROCEDURE `sp_print_result`(
 IN f_string varchar(1000),IN f_delimiter varchar(5)
)
BEGIN
 -- Get the separated string.
 declare cnt int default 0;
 declare i int default 0;
 set cnt = func_get_split_string_total(f_string,f_delimiter);
 drop table if exists tmp_print;
 create temporary table tmp_print (num int not null);
 while i  cnt
 do
  set i = i + 1;
  insert into tmp_print(num) values (func_get_split_string(f_string,f_delimiter,i));
 end while;
 select * from tmp_print;
END$$
DELIMITER ;

然后輸入字符串進行測試。

call sp_print_result(“434,123,12,234,123,123”,”,”);

結果如下圖

可能執行的時候會報錯:The user specified as a definer (‘root'@'%') does not exist

解決方法如下:

執行 :grant all privileges on *.* to root@"%" identified by ".";

執行 :flush privileges;

就解決了這個問題。

最后說一下存儲過程和mysql的函數

存儲過程是用戶定義的一系列sql語句的集合,涉及特定表或其它對象的任務,用戶可以調用存儲過程,而函數通常是數據庫已定義的方法,它接收參數并返回某種類型的值并且不涉及特定用戶表。

存儲過程和函數存在以下幾個區別:

1)一般來說,存儲過程實現的功能要復雜一點,而函數的實現的功能針對性比較強。存儲過程,功能強大,可以執行包括修改表等一系列數據庫操作;用戶定義函數不能用于執行一組修改全局數據庫狀態的操作。

2)對于存儲過程來說可以返回參數,如記錄集,而函數只能返回值或者表對象。函數只能返回一個變量;而存儲過程可以返回多個。存儲過程的參數可以有IN,OUT,INOUT三種類型,而函數只能有IN類~~存儲過程聲明時不需要返回類型,而函數聲明時需要描述返回類型,且函數體中必須包含一個有效的RETURN語句。

3)存儲過程,可以使用非確定函數,不允許在用戶定義函數主體中內置非確定函數。

4)存儲過程一般是作為一個獨立的部分來執行( EXECUTE 語句執行),而函數可以作為查詢語句的一個部分來調用(SELECT調用),由于函數可以返回一個表對象,因此它可以在查詢語句中位于FROM關鍵字的后面。 SQL語句中不可用存儲過程,而可以使用函數。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

您可能感興趣的文章:
  • Mysql字符串截取及獲取指定字符串中的數據
  • MySQL截取和拆分字符串函數用法示例
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

標簽:洛陽 甘南 葫蘆島 嘉峪關 拉薩 吐魯番 安徽

巨人網絡通訊聲明:本文標題《Mysql通過存儲過程分割字符串為數組》,本文關鍵詞  Mysql,通過,存儲,過程,分割,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Mysql通過存儲過程分割字符串為數組》相關的同類信息!
  • 本頁收集關于Mysql通過存儲過程分割字符串為數組的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 旅游| 宁德市| 旺苍县| 岳普湖县| 天镇县| 清新县| 锦州市| 黄骅市| 滦南县| 卓尼县| 威远县| 宁城县| 延长县| 阳东县| 黄大仙区| 集安市| 太仆寺旗| 乡宁县| 通州区| 米脂县| 海南省| 隆化县| 遂宁市| 台北市| 峨边| 浦北县| 张家口市| 彩票| 新龙县| 霍山县| 义马市| 陆川县| 南木林县| 芦山县| 南部县| 江源县| 阳城县| 融水| 九台市| 温宿县| 磐石市|