Mysql 选择字符串中所有子字符串出现的位置

Mysql 选择字符串中所有子字符串出现的位置,mysql,replace,Mysql,Replace,我试图获取数据库字段中出现的所有子字符串以及每个子字符串之后下一个索引的位置。到目前为止,我所做的是获得第一个匹配项以及它后面的下一个字符串的位置,如下所示: SELECT dataset.id, SUBSTRING(dataset.text, LOCATE('XXXX', dataset.text) + LENGTH('XXXX')) FROM datatable as dataset 请提供任何帮助以获取所有事件 也许这有助于: delimiter // CREATE FU

我试图获取数据库字段中出现的所有子字符串以及每个子字符串之后下一个索引的位置。到目前为止,我所做的是获得第一个匹配项以及它后面的下一个字符串的位置,如下所示:

SELECT dataset.id,
       SUBSTRING(dataset.text, LOCATE('XXXX', dataset.text) + LENGTH('XXXX')) 
FROM datatable as dataset

请提供任何帮助以获取所有事件

也许这有助于:

delimiter //
CREATE FUNCTION getpos(haystack VARCHAR(255), search VARCHAR(10))
RETURNS VARCHAR(255)
BEGIN
    DECLARE ret VARCHAR(255);
    DECLARE pos INT;
    SET ret = "";
    SET pos = LOCATE (search, haystack);
    WHILE (pos > 0) DO
        SET ret = CONCAT_WS (',', ret, pos);
        SET pos = LOCATE (search, haystack, pos+1); 
    END WHILE;
    RETURN ret;
END// 
然后执行以下操作:

SELECT dataset.id, getpos (dataset.text, 'XXXX') FROM datatable as dataset

你能举例说明你想要什么吗?好的@John Woo,让我们看下面的文本:{第二个str返回str substr在string str中第一次出现的str}我想在上面的文本中搜索单词“str”的索引,所以结果应该是例如:12、29、53、77用PHP或其他什么做这件事。数据库是用来保存和/或获取数据的。没有更多。@user1180376。你想用这个做什么?而且,假设列的数量是固定的,那么您打算如何存储结果呢?我在示例文本中计算了六次出现的
str
,但您的示例结果只显示了四个的位置。您需要改进问题规范;而且,正如其他人所说,如果我们知道你想做什么,可能有更好的方法来实现你想要的结果。看见