工作随笔——壹(关于MYSQL数据库中字符串与字符串匹配问题)

问题描述:

MYSQL数据库储存中采用A,B,C,D.....字符串形式储存(I),前台返回值形式为字符串B,D,...(II),要求二者进行匹配,返回的List要求满足条件:II中每个逗号中间的值与I中匹配,存在即以此为条件进行查询。


问题难点:

1、不能在服务端将II拆分,拆分必须在MYSQL层面进行,而在MYSQL中将字符串拆分并转化为or row like B or row like D所需代码量太大。

2、II中的元素量无法提前预知,且有可能非常大,按照常规办法很有可能形成 or row like X*1000的情况,对系统运行不利。


尝试办法:

1、循环拆分II,挨个进行匹配,符合条件后再进行SELECT动作加入新表。(无法在mybatis文件中写入,且代码量太大,对系统压力太大)

2、服务端进行拆分,然后循环查询,将新的结果加入到List,使用List.addAll方法。(此方法成功,但是由于此次网站框架限制,不能在服务端对II进行拆分,故放弃)

3、SELECT * FROM TABLE1 WHERE row like '%B%D%',可以查询出一部分要求内容,但此语句对I中含有D,...B....之类的无效。


解决办法:

采用正则表达式。

SELECT * FROM TABLE1 WHERE row REGEXP B|D

仅需要将II中的逗号改为“|”即可。


附正则表达式“|”的意义:

de|abc ————————匹配de或abc。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值