2009-12-18 85 views
2

我正在编写一个存储过程,它通过 传递的分隔符将传递的字符串分解并返回结果的第n个元素。 n也通过 。mySQL按分隔符分割字符串的存储过程

原来这就是我想出了:

CREATE PROCEDURE SPLIT(IN strToSplit text, IN strDelimiter varchar(1), IN nPartToGet int,OUT strSlice varchar(255)) 
BEGIN 

    SET strSlice = replace(substring(substring_index(strToSplit, strDelimiter, nPartToGet), 
    length(substring_index(strToSplit,strDelimiter, nPartToGet - 1)) + 1), strDelimiter, '') 

END 
; 

可悲的是MySQL总是naging我说,我在那里得到了一个语法错误。恕我直言,这应该工作。任何人都可以请我戳我要去哪里?

在此先感谢

K 

回答

2

你需要来结束你设定 ';'并且,鉴于客户的解释;作为分隔符,您需要更改分隔符,以便输入实际的分隔符;进入程序。

mysql> delimiter // 
mysql> CREATE PROCEDURE SPLIT(IN strToSplit text, IN strDelimiter varchar(1), IN nPartToGet int,OUT strSlice varchar(255)) 
    -> BEGIN 
    -> SET strSlice = replace(substring(substring_index(strToSplit, strDelimiter, 
    -> nPartToGet),  length(substring_index(strToSplit,strDelimiter, 
    -> nPartToGet - 1)) + 1), strDelimiter, ''); 
    -> END 
    -> // 
Query OK, 0 rows affected (0.01 sec) 
mysql> delimiter ; 
mysql> CALL SPLIT('1;2;3;4;5',';',3,@str); 
Query OK, 0 rows affected (0.00 sec) 

mysql> SELECT @str; 
+------+ 
| @str | 
+------+ 
| 3 | 
+------+ 
1 row in set (0.00 sec) 

相关的文档:http://dev.mysql.com/doc/refman/5.0/en/stored-routines.html

+0

感谢您的回复速度快,摸索出。 – KB22 2009-12-18 14:12:36