在MySQL中找到一个字符串有些麻烦

时间:2016-04-05 14:56:13

标签: mysql sql regex xml

我正在MySQL数据库中进行一些研究,其中一些数据存储为XML。我已经设法找到我正在搜索的字符串:

select * from foo where Concat(foo) like '%bar%';

现在我试图找到只有“bar”出现2次的条目。在我正在搜索的表格中,“bar”总是出现一次所以我想找到至少2x“bar”的条目。

你能给我一些建议吗?

2 个答案:

答案 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小提琴。

http://sqlfiddle.com/#!9/49fd7/1/0

答案 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?