ケースソリューションを無視したファジークエリ

問題の説明:

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

おすすめ

転載: blog.csdn.net/weixin_43811057/article/details/115057231