我该如何在Sequelize中实现这个?
SELECT * FROM table where lower(column) LIKE ('abcd%');
我找不到把lower函数和$like混合使用的方法。
我该如何在Sequelize中实现这个?
SELECT * FROM table where lower(column) LIKE ('abcd%');
我找不到把lower函数和$like混合使用的方法。
你应该使用 Sequelize.Op:
Table.findAll({
where: {
name: {
[Sequelize.Op.iLike]: searchQuery
}
}
})
如果你想进行部分查询,请不要忘记在搜索查询(searchQuery)之前或之后添加百分号(%)。
我找到了解决方案:
Table.findAll({
attributes: ['createdAt', 'col'],
where: {
$and:[
{
createdAt:{
$between:[minDate, maxDate]
}
},
Sequelize.where(
Sequelize.fn('lower', Sequelize.col('col')),
{
$like: 'abcd%'
}
)
]
}
});
where()
和 fn()
的结合。 - Facundo Chambo{where: 'raw query'}
has been removed.”,有什么新的解决方式呢?就像在Sequelize中涉及到许多“稍微高级但不是可怕的”SQL事物一样,我发现直接手动编写代码虽然速度较慢,但在6个月或一年后回顾代码时更易读和可维护。:\ - ChrisHSequelize.col('table.col')
- Sylvain P如果您正在使用PostGres,您可以使用$iLike运算符搜索行(而不是像您的问题要求的列名)。
虽然它没有完全回答您的问题,但希望它能帮助未来搜索大小写不敏感 + Sequelize 的人,这也是我来到这里的原因。
Table.findAll({
where: {
createdAt: {
$between: [minDate, maxDate]
},
someOtherColumn: {
$like: '%mysearchterm%'
}
}
})
我遇到了类似的问题,并通过以下方式解决:
const values = ['adcd'].map(x => x.toLowerCase());
const results = await SomeModel.findAll({
attributes: [
...Object.keys(SomeModel.rawAttributes),
[Sequelize.fn('LOWER', Sequelize.col('someColumn')), 'lower'],
],
having: { lower: values, },
});
lower()
。Like
隐式地是一个不区分大小写的搜索。 如果它不是utf8
,则可能会因您的排序/字符集而异。 - Ryan Shillington