MYSQL通過儲存過程分割字串為陣列

2021-09-13 19:50:26 字數 1761 閱讀 9805

1、 獲得所有以「某個符號「分割的字串的個數

delimiter $$

create function `f_get_split_string_total`(

f_string varchar(4000),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、 按分割取出字串

delimiter $$

create function `f_get_split_string`(f_string varchar(4000),f_delimiter varchar(5),f_order int)

returns varchar(255)

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 ;

3、 再寫乙個儲存過程進行組合使用這兩個函式,輸入需要分割的字串和分隔符,輸出按某某符號分割後的陣列 

delimiter $$

create procedure `p_print_result`(

in f_string varchar(4000),in f_delimiter varchar(5)

begin

-- get the separated string.

declare cnt int default 0;

declare i int default 0;

set cnt = f_get_split_string_total(f_string,f_delimiter);

drop table if exists tmp_print;

create temporary table tmp_print (varchar(255) int not null);

while i < cnt

doset i = i + 1;

insert into tmp_print(num) values (f_get_split_string(f_string,f_delimiter,i));

end while;

select * from tmp_print;

end$$

delimiter;

4、 輸入字串進行測試。 

call p_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 字串分割儲存過程

drop procedure if exists splitstr create procedure splitstr in str varchar 255 out substr varchar 2000 out idstr varchar 100 begin declare index var v...

MySql分割字串 儲存過程

mysql沒有表變數,通過函式無法返回表。參考 delimiter use 資料庫 drop procedure if exists split create definer sa scmone procedure split in string varchar 300 begin 求分割符號 的位...

Mysql儲存過程中字串分割

今在專案中碰到了要把字串分割,記錄下來,以後可能還用的到 首先想上我的儲存過程 delimiter use bplate drop procedure if exists lp plate insertplateinfo create definer root localhost procedure...