模糊查询忽略大小写解决方案

问题描述:

通常在数据库存入的英文数据会有大小写混合的情况,在模糊查询时数据库对关键字的大小写不明感,我们需要对数据进行处理才能正确的搜索出数据。
例如:数据库中英文名称存入的Tom
搜索关键字:Tom,T,To,能够正确的检索出来
搜索关键字:TOM,TO是搜索不出来的。

解决方案:统一将关键字转为大写或者小写,对应的数据库字段也要转为大写或者小写
在这里插入图片描述

SELECT * 
FROM USER 
WHERE UPPER( EN_NAME ) 
LIKE CONCAT( CONCAT( '%',UPPER(#{search})),'%')

在这里插入图片描述

SELECT * 
FROM USER 
WHERE 
LOWER( EN_NAME ) 
LIKE CONCAT( CONCAT( '%',LOWER(#{search})),'%')

java业务中将关键字转为大写、小写

search=search.toUpperCase()
search=search.toLowerCase()

业务中的sql

    <select id="findPageCount" parameterType="com.ats.dt.entity.vo.MapperPage" resultType="int">
        SELECT count(1) FROM BUSINESS_TERMS WHERE IS_DELETE = 0
        <if test="search!=null">
            <!--and	( CN_NAME like '%'+#{search}+'%' or EN_NAME like '%'+#{search}+'%' or EN_SHORT_NAME like '%'+#{search}+'%' )-->
            and (CN_NAME like CONCAT(CONCAT('%',#{search}),'%') OR UPPER(EN_NAME) like CONCAT(CONCAT('%',#{search}),'%') OR
            UPPER(EN_SHORT_NAME)  like CONCAT(CONCAT('%',#{search}),'%') OR PY_CODE like CONCAT(CONCAT('%',#{search}),'%')
            OR WB_CODE like CONCAT(CONCAT('%',#{search}),'%') OR BUSINESS_TERMS_SOID like CONCAT(CONCAT('%',#{search}),'%'))
        </if>
    </select>


    <select id="findPage" parameterType="com.ats.dt.entity.vo.MapperPage" resultMap="BaseResultMapVo">
        select * FROM
        (SELECT A.*, ROWNUM RN FROM (SELECT BT.*,case BT.status when 150 then '未启用' when 149 then '启用' end as STATUS_NAME
        FROM BUSINESS_TERMS BT WHERE 1=1 and  IS_DELETE = 0
        <if test="search!=null">
            <!--and	( CN_NAME like '%'+#{search}+'%' or EN_NAME like '%'+#{search}+'%' or EN_SHORT_NAME like '%'+#{search}+'%' )-->
            and (CN_NAME like CONCAT(CONCAT('%',#{search}),'%') OR UPPER(EN_NAME) like CONCAT(CONCAT('%',#{search}),'%') OR
            UPPER(EN_SHORT_NAME)  like CONCAT(CONCAT('%',#{search}),'%') OR PY_CODE like CONCAT(CONCAT('%',#{search}),'%')
            OR WB_CODE like CONCAT(CONCAT('%',#{search}),'%') OR BUSINESS_TERMS_SOID like CONCAT(CONCAT('%',#{search}),'%'))
        </if>
        ORDER BY CREATE_DATE DESC) A
        )
        WHERE RN BETWEEN #{pageSt} AND #{pageEd}
    </select>

猜你喜欢

转载自blog.csdn.net/weixin_43811057/article/details/115057231