项目场景:
项目场景:前端有一个输入框,匹配后端多个字段,需要模糊查询
问题描述
多字段模糊查询有的数据可以查到,有的查不到。
<if test="remarks_key !=null and remarks_key !=''">
and CONCAT(t.FILE_NAME,t.NAME,t.REMARKS,t.CHANGE_DESCRIPTION)
LIKE CONCAT('%',#{remarks_key,jdbcType=VARCHAR},'%')
</if>
原因分析:
CONCAT 函数在遇到 NULL 值时,会返回 NULL。如果 t.FILE_NAME、t.NAME、t.REMARKS、t.CHANGE_DESCRIPTION 中任意一个字段为 NULL,那么 CONCAT(t.FILE_NAME,t.NAME,t.REMARKS,t.CHANGE_DESCRIPTION) 的结果就会是 NULL,而 NULL 与任何字符串进行 LIKE 比较都会返回 NULL,从而导致查询不出结果。
解决方案:
使用 COALESCE 函数将 NULL 值转换为空字符串。
<if test="remarks_key !=null and remarks_key !=''">
and CONCAT(
COALESCE(t.FILE_NAME, ''),
COALESCE(t.NAME, ''),
COALESCE(t.REMARKS, ''),
COALESCE(t.CHANGE_DESCRIPTION, '')
) LIKE CONCAT('%',#{remarks_key,jdbcType=VARCHAR},'%')
</if>