天天看點

mysql存儲過程字元串截取函數_mysql存儲過程下分割字元串函數

MySQL存儲過程可以用于分割字元串,下面就為您詳細介紹這種MySQL存儲過程的用法,供您參考學習之用。     現有一段字元串,如apple,banana,orange,pears,grape,要把它按照逗号(,)分割成:  apple   banana   orange   pears   grape  然後使用where in()方法可以查詢。1、具體函數:

# 函數:func_split_TotalLength

DELIMITER $$

DROP function IF EXISTS `func_split_TotalLength` $$

CREATE DEFINER=`root`@`%` FUNCTION `func_split_TotalLength`

(f_string varchar(1000),f_delimiter varchar(5)) RETURNS int(11)

BEGIN

# 計算傳入字元串的總length

return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));

END$$

DELIMITER;

# 函數:func_split

DELIMITER $$

DROP function IF EXISTS `func_split` $$

CREATE DEFINER=`root`@`%` FUNCTION `func_split`

(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;

# 存儲過程:splitString

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` (`status` varchar(128) not null) DEFAULT CHARSET=utf8;

while i 

do

set i = i + 1;

insert into tmp_split(`status`) values (func_split(f_string,f_delimiter,i));

end while;

END$$

DELIMITER;

2、測試是否能成功分割

call splitString("apple,banana,orange,pears,grape",",");

select * from tmp_split;

運作結果如下,說明分割成功:

mysql> call splitString("apple,banana,orange,pears,grape",",");

select * from tmp_split;

Query OK, 1 row affected

+--------+   | status |   +--------+   | apple  |   | banana |   | orange |   | pears  |   | grape  |   +--------+   5 rows in set

mysql>

3、應用where in()查詢

# 先傳入字元串,分割後儲存在臨時表tmp_split中

call splitString("apple,banana,orange,pears,grape",",");

# 将查詢的結果作為其他查詢的條件來使用

select * from fruit where in(select * from tmp_split);

以上就是利用MySQL存儲過程分割字元串的方法介紹。