Mysql的FIND_IN_SET

home_shipper_status存0,1,2

今天看到同事这么设置参数的

if (UserAuthEnum.AUTH_STATUS_VALIDATED.getCode().equals(popQuery.getAuthStatus())) {
                query.setHomeShipperStatus("0,2");
            } else {
                query.setHomeShipperStatus("0,1");
            }

mybatis 局部

  select *
        from common_notice
        where 1 = 1 and release_home = '1'
        <if test="homeShipperStatus != null and homeShipperStatus != ''">
            and FIND_IN_SET(home_shipper_status, #{homeShipperStatus})
        </if>

sql实际是:

SELECT home_shipper_status
FROM aflc_common_notice
WHERE 1 = 1 AND release_home = ‘1’
AND FIND_IN_SET(home_shipper_status, ‘0,1’)
结果
在这里插入图片描述

如果把sql改用in 代码在拼接参数就复杂点,MyBatis用foreach语句解决
SELECT home_shipper_status
FROM aflc_common_notice
WHERE 1 = 1 AND release_home = ‘1’
AND home_shipper_status IN(‘0’,‘1’);

变量放在前面:字段要加esc键下的点

 SELECT home_shipper_status
FROM aflc_common_notice
WHERE 1 = 1 AND release_home = '1'
    AND FIND_IN_SET('0', `home_shipper_status`);

结果:
在这里插入图片描述

这样就不行的,会没结果:
AND FIND_IN_SET(‘0,1’, home_shipper_status);

这个语句:
SELECT FIND_IN_SET(‘b’,‘a,b,c,d’);
结果:
在这里插入图片描述

相信你看了就知道FIND_IN_SET怎么用了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值