API调用时使用LIKE操作符实现区分大小写过滤的问题咨询
LIKE查询实现区分大小写过滤的方案
根据你使用的后端存储/API类型,可选以下几种方案:
方案1:直接修改数据库查询语法(适用自行开发的后端接口)
不同数据库的区分大小写语法不同,直接修改拼接的查询语句即可:
- MySQL场景:默认LIKE不区分大小写,查询时追加
BINARY关键字强制按二进制匹配即可,修改后代码如下:
生成的过滤参数为queryEvent.query = queryEvent.combo.displayField + " like binary " + "'%" + query + "%'";filter=name%20like%20binary%20%27%25Test%25%27,即可实现区分大小写的模糊匹配。 - PostgreSQL场景:原生
LIKE默认就是区分大小写的,确认后端没有将LIKE替换为不区分大小写的ILIKE即可;也可以使用正则运算符~实现更强的区分大小写匹配。 - SQL Server场景:查询时指定区分大小写的排序规则即可,示例代码如下:
排序规则后缀queryEvent.query = queryEvent.combo.displayField + " like " + "'%" + query + "%' COLLATE Chinese_PRC_CS_AS";CS代表区分大小写,CI代表不区分,可根据实际业务调整排序规则名。
方案2:调用第三方API的场景
如果对接的是第三方封装好的API,无法直接修改数据库查询逻辑:
- 优先查询对应API的官方文档,一般支持过滤的API都会提供区分大小写的控制参数,比如追加
case_sensitive=true的全局参数,或者将like替换为平台指定的区分大小写运算符(如like_case等)。 - 如果API本身不支持区分大小写过滤,可以在拿到接口返回结果后在前端做二次过滤,示例代码如下:
// apiResponse为接口返回的原始数据列表 const filteredList = apiResponse.filter(item => { const fieldValue = item[queryEvent.combo.displayField] || '' return fieldValue.includes(query) })
注意:你当前直接拼接SQL字符串的写法存在SQL注入风险,建议优先使用参数化查询的方式传递查询值,避免恶意输入篡改查询逻辑。
内容的提问来源于stack exchange,提问作者yer
相关产品推荐
相关产品推荐

