NodeJS 如何在Sequelize中使用LIKE和findAll的COLLATE(T-SQL)?

9udxz4iz  于 2023-08-04  发布在  Node.js
关注(0)|答案(1)|浏览(179)

我在Sequelize中找到了以下脚本:

findAll(Peope, {
  where: {
    [Op.or]: [
      { firstName: { [Op.like]: `%${search}%` } },
      { lastName:  { [Op.like]: `%${search}%` } },
    ]
  }
});

字符串
这将生成下面的WHERE子句:

WHERE
  (
    [Player].[firstName] LIKE N'%test%'
    OR [Player].[lastName] LIKE N'%test%'
  )


我想添加COLLATE来删除重音敏感的搜索,所以我的最终SQL代码应该是这样的:

WHERE
  (
    [Player].[firstName] COLLATE Latin1_general_CI_AI LIKE N'%test%'
    OR [Player].[lastName] COLLATE Latin1_general_CI_AI LIKE N'%test%'
  )


我如何才能实现这一点与续集?

nkkqxpd9

nkkqxpd91#

Sequelize不直接支持where子句中的COLLATE,但可以使用Sequelize.literal将原始SQL注入查询。
就像这样:

findAll(Peope, {
  where: {
    [Op.or]: [
      Sequelize.literal(`[Player].[firstName] COLLATE Latin1_general_CI_AI LIKE N'%${search}%'`),
      Sequelize.literal(`[Player].[lastName] COLLATE Latin1_general_CI_AI LIKE N'%${search}%'`)
    ]
  }
});

字符串

相关问题