如果我有一个字符串:
'#name#user#user2#laugh#cry'
我想打印
name
user
user2
laugh
cry
所有字符串都不同,并且具有不同数量的'#'
。
我尝试过使用Regex,但无法正常工作。此查询必须采用什么逻辑?
答案 0 :(得分:3)
首先要说的是,在许多方面,将分隔的值列表存储在文本列中并不是一个好的数据库设计。您应该基本上重新设计数据库结构,或者为可能带来的痛苦做好准备。
一种快速而肮脏的解决方案是使用数字表或内联suquery,并将其与表交叉连接; 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
正则表达式[^#]+
的意思是:除#
以外的尽可能多的连续字符。
demo on DB Fiddle ,当给定输入字符串'#name#user#user2#laugh#cry'
时,返回:
| name |
| ----- |
| name |
| user |
| user2 |
| laugh |
| cry |