问题描述:
通常在数据库存入的英文数据会有大小写混合的情况,在模糊查询时数据库对关键字的大小写不明感,我们需要对数据进行处理才能正确的搜索出数据。
例如:数据库中英文名称存入的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>