如何使用 MySQL Workbench 查找字符串中多次出现的子字符串?

How can I find multiple occurrences of a substring within a string using MySQL Workbench?

我正在尝试编写的查询(使用 MySQL Workbench)需要搜索一个文本字段和 return 在其中出现的所有 "placeholder" 子字符串文本字段。

我正在搜索的文本实际上是一个包含占位符的文档,我想查看其中所有占位符的列表。每个占位符都有不同的值,但由特殊字符(例如 |^ ... ^|)分隔。

我遇到的问题是我无法在 Workbench 中进行循环或递归来搜索文本字段,因此我需要一些其他方法来搜索它。我尝试过的所有 MySQL 函数(例如 locate() )仅 return 第一次出现子字符串(或其位置)。

如果我的文本字段是:

"blah blah blah |^123^| blah blah blah |^456^| blah blah blah |^789^| blah"


我想看:

占位符
--------------
123
456
789

根据我的评论,MySQL 不是最适合此类任务的。也就是说,这里有一些事情需要考虑...

SET @string = "blah blah blah |^123^| blah blah blah |^456^| blah blah blah |^789^| blah";

SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+


SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(@string,'\|\^',i+1),'\|\^',-1),'^|',1) x 
           FROM ints i;
+-----------------+
| x               |
+-----------------+
| blah blah blah  |
| 123             |
| 456             |
| 789             |
+-----------------+