代码之家  ›  专栏  ›  技术社区  ›  KB22

用于按分隔符拆分字符串的MySQL存储过程

  •  2
  • KB22  · 技术社区  · 15 年前

    我正在编写一个存储过程,它通过 传递分隔符并返回结果的第n个元素。N通过 也是。

    这就是我想到的:

    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一直在唠叨我有语法错误。我觉得这应该管用。有人能告诉我哪里出错了吗?

    提前谢谢

      K
    
    1 回复  |  直到 10 年前
        1
  •  2
  •   Richard Pascual    10 年前

    您需要以“;”结束您的集合,并且考虑到客户机将其解释为;作为分隔符,您需要更改分隔符,以便可以在过程中输入实际值。

    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