如果,我有一个字符串:
'#name#user#user2#laugh#cry'
我要打印,
name
user
user2
laugh
cry
所有的字符串都是不同的,并且有不同数量的'#'
。
我试过使用正则表达式,但它不起作用。此查询必须应用什么逻辑?
最佳答案
首先要说的是,在许多方面,在文本列中存储分隔值列表并不是一个好的数据库设计。您基本上应该重做您的数据库结构,或者为潜在的痛苦世界做好准备。
一个快速而肮脏的解决方案是使用数字表或内联查询,并将其与表交叉连接; REGEXP_SUBSTR()
(在 MySQL 8.0 中可用),让您选择特定模式的给定出现。
这是一个将从列中提取最多 10 个值的查询:
SELECT
REGEXP_SUBSTR(t.val, '[^#]+', 1, numbers.n) name
FROM
mytable t
INNER JOIN (
SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7
UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10
) numbers
ON REGEXP_SUBSTR(t.val, '[^#]+', 1, numbers.n) IS NOT NULL
Regexp [^#]+
表示:除了#
之外,尽可能多的连续字符。
Ths demo on DB Fiddle ,当给定输入字符串'#name#user#user2#laugh#cry'
时,返回:
| name |
| ----- |
| name |
| user |
| user2 |
| laugh |
| cry |
关于mysql - 如何提取MySQL中某个字符之后出现的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55173640/