問題の説明:
通常、データベースに入力される英語のデータは大文字と小文字が混在します。データベースはファジークエリ中にキーワードの大文字と小文字を認識しません。データを正しく検索するには、データを処理する必要があります。
例:データベースに英語と中国語の名前で保存されているトム
検索キーワード:トム、T、To、正しく取得できます。
検索キーワード:トム、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>