You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Knex的WHERE LIKE查询中转义%符号?

在Knex中搜索包含%符号的查询词

要在Knex的LIKE查询里把%当作字面量搜索,你需要先转义查询词里的%(还有_,因为它也是LIKE的通配符),避免数据库把它们识别为通配符。下面是几种可行的方案:

方案1:手动转义通配符(适配多数数据库)

先把查询词里的%和_替换成对应的转义形式,再包裹前后的%作为通配符。MySQL和PostgreSQL默认用\作为转义字符,代码示例如下:

function search(term) {
  // 转义term中的%和_通配符
  const escapedTerm = term.replace(/%/g, '\\%').replace(/_/g, '\\_');
  // 包裹通配符后执行查询
  return knex('table').where('description', 'like', `%${escapedTerm}%`);
}

方案2:使用WHERE RAW指定自定义转义字符(跨数据库通用)

如果你的项目需要适配不同数据库(比如SQL Server用[]转义),可以用whereRaw并指定自定义转义字符,避免依赖数据库默认的转义规则,兼容性更强:

function search(term) {
  // 用!作为自定义转义字符,把term里的%替换成!%,_替换成!_
  const escapedTerm = term.replace(/%/g, '!%').replace(/_/g, '!_');
  // 包裹通配符,同时在WHERE RAW里指定ESCAPE子句
  return knex('table')
    .whereRaw('description LIKE ? ESCAPE ?', [`%${escapedTerm}%`, '!']);
}

注意事项

  • 别忽略_的转义:它在LIKE查询里是匹配单个任意字符的通配符,如果你的业务场景允许用户输入_,也要一并转义,避免出现意外的匹配结果。
  • 不同数据库的默认转义规则存在差异,使用ESCAPE子句的方式适配性更好,适合跨数据库的项目。

内容的提问来源于stack exchange,提问作者Jun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:33:04