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

背景概述:

在该项目中,按照类别名称进行模糊查询(包括大小写),类别名称存在一、二级分类,对应字段分别为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