1.问题
平时通过like查询数据库,如果遇到1和11 这种相似的字符串,可能我想查的是只包含1的,但通常用like ‘%1%’会把"11"的数据也查询出来,那该怎么办呢?
2. pgsql 语句查询
使用拼接字符串就可以解决!
select id,tenant_id,rebate_type,del_flag
from gksk_rebate.write_off_voucher
WHERE del_flag = false and (tenant_id =1224 and del_flag =false
and (CONCAT(',',rebate_type,',') LIKE '%,1,%'
or CONCAT(',',rebate_type,',') like '%,2,%' or CONCAT(',',rebate_type,',') like '%,3,%' or CONCAT(',',rebate_type,',') like'%,4,%'))
我这个查询语句比较复杂,其实就是想查询rebate_type的类型,但我的rebate_type又是字符串,可能的数据有"1" '2" "1,11" "22,3",然而用concat的方式就可以完美查询出想要的结果。
3. mybatis-plus查询
queryWrapper.and(wrapper -> wrapper
.like("CONCAT(',',rebate_type,',')", String.format("%s%s%s", ',', RebateTypeEnum.PaymentCollectionRebateType.value(), ','))
.or()
.like("CONCAT(',',rebate_type,',')", String.format("%s%s%s", ',', RebateTypeEnum.AmountRebateType.value(), ','))
.or()
.like("CONCAT(',',rebate_type,',')", String.format("%s%s%s", ',', RebateTypeEnum.FlowRebateType.value(), ','))
.or()
.like("CONCAT(',',rebate_type,',')", String.format("%s%s%s", ',', RebateTypeEnum.OneOffRebateType.value(), ','))
);
其实querywrapper完全类似于sql语句,就是把concat直接拼在like()函数,作为列名拼接。我这里wrapper是使用内嵌括号查询的,大家可以根据自己的查询逻辑决定是否这样添加,也可以直接querywrapper.like(),视具体情况而定了。