有什么类似于mySql中的split()方法吗?

时间:2009-07-03 03:52:53

标签: mysql

我正在寻找一个存储过程,它将一个由一个标记分隔的字符串作为参数,然后在该过程中为该字符串中的每个项目运行一个while循环。

我在mysql文档中没有看到任何可以完成此任务的内容......有没有办法做到这一点?

3 个答案:

答案 0 :(得分:3)

我认为你需要推出自己的功能。 substring_index会派上用场:

SUBSTRING_INDEX(str,delim,count)

在分隔符delim的计数出现之前,从字符串str返回子字符串。如果count为正数,则返回最终分隔符左侧的所有内容(从左侧开始计算)。如果count为负数,则返回最终分隔符右侧的所有内容(从右侧开始计算)。搜索delim时,SUBSTRING_INDEX()执行区分大小写的匹配。

mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
        -> 'www.mysql'
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
        -> 'mysql.com'

此功能是多字节安全的。

答案 1 :(得分:3)

不幸的是,mysql不允许函数返回数组或表(我知道),所以你必须有点hackily。

这是一个存储过程示例:

DELIMITER $$

create function splitter_count (str varchar(200), delim char(1)) returns int
  return (length(replace(str, delim, concat(delim, ' ')))  - length(str)) $$

CREATE PROCEDURE tokenize (str varchar(200), delim char(1))
BEGIN
  DECLARE i INT DEFAULT 0;
  create table tokens(val varchar(50));
  WHILE i <= splitter_count(str, delim) DO
    insert into tokens(val) select(substring_index(SUBSTRING_INDEX(str, delim, i+1), delim, -1));
    SET i = i + 1;
  END WHILE;

END $$

DELIMITER ;

这将标记您的字符串,并将值插入名为“tokens”的表中,每行一个标记。你应该能够修改它以便很容易地做一些有用的事情。此外,您可能希望将输入长度从200增加。

答案 2 :(得分:1)

我认为你可以通过substring_index

完成你想要的任务

它不像split()函数那么简单,但我确信你可以用这个函数计算出一个while循环。