mysql-判断两个字符串是否存在交集
- 函数的方式(这个暂时不介绍)
- sql的方式(正则)
select concat(str1, ',') regexp concat(replace(str2,',',',|'),',');
这个表达式,匹配时看似可以满足需求,实际会存在短匹配情况。
比如对“3333,44”这样的字符串进行匹配,如果想要匹配"3333"或者"44"或者"3333,44"这三种字符串,可以使用|限定符(表示或者的意思),同时加以逗号进行精准匹配,似乎以满足需求,其实不然,还差一步。此时匹配的长度可能不是最长的,而最长匹配才是正确匹配,也就是说,实际还有可能会匹配上"33"或"33,"甚至"33,4"等字符串。
整了好久,也没找到解决方案。好在最后,灵感突发,实现了。
其实最长匹配的实现思路就是限定其长度然后匹配,所以只要在将可能匹配的数字包裹在逗号之间即可,也就是说完全匹配时可以通过",3333,"的形式去匹配。
SELECT concat(',','3333,2222', ',')
select concat(',','3333,2222', ',') regexp concat(',',replace('33,22',',',',|,'),',') -- ,33,或者,22,
ps:返回值为1表示匹配,为0表示不匹配。
正则表达式-匹配查询-示例
select *
from mcp
where concat(',',mcp.place_code, ',') regexp concat(',',replace('3333,2222',',',',|,'),',')
list快速转string
list.stream().collect(Collectors.joining(","))
好了!至此完结!