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

如何在Sequelize中使用||连接操作符实现ILIKE模糊匹配?

在Sequelize中实现PostgreSQL字符串拼接的ILIKE查询(无需完整原生SQL)

可行方案

要保留||字符串拼接的高效性,同时在Sequelize的findAll查询中实现需求,你可以利用Sequelize.where()结合Sequelize.literal()构建条件,或者直接使用带参数绑定的literal片段,两种方式都不需要改写整个查询逻辑。

方案1:贴合Sequelize结构的写法

这种写法更符合Sequelize的查询范式,同时能实现预期逻辑:

const { Op, Sequelize } = require('sequelize');

models.Client.findAll({
  where: Sequelize.where(
    Sequelize.literal('first_name || \' \' || last_name'),
    { [Op.iLike]: `%${searchTerm}%` }
  )
});

方案2:带参数绑定的安全写法

为避免SQL注入风险,推荐使用参数替换的方式传递搜索值:

const { Sequelize } = require('sequelize');

models.Client.findAll({
  where: Sequelize.literal('first_name || \' \' || last_name ILIKE :searchTerm'),
  replacements: {
    searchTerm: `%${searchTerm}%`
  }
});

原写法无效的原因

你之前尝试将拼接表达式直接作为对象键的写法,Sequelize会把整个字符串"first_name || ' ' || last_name"当作数据库的列名解析,而非SQL表达式,因此无法触发预期的拼接匹配逻辑。

注意事项

  • 两种方案都不会破坏你现有的Sequelize查询结构,只需替换where中的对应条件即可;
  • 优先选择方案2处理用户输入的搜索词,避免SQL注入风险;
  • 该写法依然能利用你已创建的GIN索引,保持查询性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 02:59:54