Oracle模糊查询,不区分大小写

2022年9月12日12:16:26

背景概述:

在该项目中,按照类别名称进行模糊查询(包括大小写),类别名称存在一、二级分类,对应字段分别为category3_name、category4_name,其中category3_id和category4_id分别是类别名称3和4的id。对用户来说,在前端UI进行查询时,不确定是按照category3_name,还是按照category4_name进行查询。因此根据用户的输入,传至后台中,对用户的输入内容进行处理,即:

controller 中的处理

在 controller 接收来自前端的搜索内容。首先,利用函数 trim() 对搜索的内容前后空格处理;其次,搜索中的字母全部转为小写 toLowerCase()。

@ResponseBody
@ApiOperation(value = "查询")
@PostMapping(value = "/searchByCategory")
public RestfulApiResult searchByCategory(@RequestBody Map<String,String> map) {
    String searchContent = map.get("searchContent").trim().toLowerCase();
    log.info("设备类别搜索内容:" + searchContent);

    List<CategoryView> categoryList = categoryService.searchByCategory(searchContent);
    ...
	/** 省略了部分代码 */
	return new RestfulApiResult(200, "success", JSONObject.toJSON(categoryList));
}

XML 中 SQL

xml 中的 sql,由于 controller 中使用 toLowerCase(),因此 sql 语句中,使用 lower()。如果 controller 使用 toUpperCase(),则 mapper 则使用 upper()。注意:前后要保持一致。

select t1.category4_id, t1.category4_name, t1.category3_id, t1.category3_name
from tb_categoryview t1 join tb_select_devicesview t2
on (lower(t1.category4_name) like '%'||#{searchContent}||'%'
or lower(t1.category3_name) like '%'||#{searchContent}||'%')
and t1.category4_id like 'C%'
and t1.category3_id = t2.category3_id
and t2.category2_id in (select t3.category2_id from tb_select_devices t3)
order by category4_id
  • 作者:wbxingy
  • 原文链接:https://blog.csdn.net/qq_29746813/article/details/124945954
    更新时间:2022年9月12日12:16:26 ,共 1228 字。