我正在MySQL数据库中进行一些研究,其中一些数据存储为XML。我已经设法找到我正在搜索的字符串:
select * from foo where Concat(foo) like '%bar%';
现在我试图找到只有“bar”出现2次的条目。在我正在搜索的表格中,“bar”总是出现一次所以我想找到至少2x“bar”的条目。
你能给我一些建议吗?
答案 0 :(得分:2)
您应该使用REGEXP
方法
select * from foo where Concat(foo) regexp '(bar).*(bar)';
击穿
()
- 第一个捕获组
bar
- 要捕获的表达式
.
- 匹配任何字符
*
- 匹配零个或多个角色
(bar)
- 第二个捕获组
https://regex101.com/r/wM3wX9/1
来自MySQL文档
执行字符串表达式expr与模式pat的模式匹配。模式可以是扩展的正则表达式,其语法将在本节后面讨论。如果expr匹配pat,则返回1;否则返回0.如果expr或pat为NULL,则结果为NULL。 RLIKE是REGEXP的同义词,提供mSQL兼容性。
我还为此创建了一个SQL小提琴。
答案 1 :(得分:0)
这是一个scalable
解决方案,可以在任何重复的时间使用,例如1,2,10,100等。
-- match twice
select * from foo where (length(foo) - replace(foo,'bar',''))/length('bar') = 2;
-- match 3 repeated times
select * from foo where (length(foo) - replace(foo,'bar',''))/length('bar') = 3;
-- match 100 repeated times
select * from foo where (length(foo) - replace(foo,'bar',''))/length('bar') = 100;
SQL function to get count of how many times string appears in column?