我是Sequelize的新手,经过大量研究后,我找不到同时使用 LOWER 和 LIKE 编写查询的方法。
我想写类似的东西:
SELECT *
FROM acessories
WHERE LOWER(name) LIKE '%xyz%'
OR LOWER(description) LIKE '%xyz%'
ORDER BY name
我写了这样的代码,但是我不能使用LOWER函数:
const getAcessories = await Acessories.findAndCountAll({
limit,
offset: start,
order: [["name", "ASC"]],
where: {
[Sequelize.Op.or]: [
{
name: {
[Sequelize.Op.like]: `%${search}%`
},
description: {
[Sequelize.Op.like]: `%${search}%`
}
}
]
}
});
编辑:创建表命令:
从atm_usuarios中选择*;
CREATE TABLE `acessories` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`store` int(11) NOT NULL,
`in_value` decimal(10,2) NOT NULL,
`out_value` decimal(10,2) NOT NULL,
`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`description` varchar(500) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`created_at` datetime NOT NULL,
`updated_at` datetime DEFAULT NULL,
`deleted_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 collate=utf8_general_ci ROW_FORMAT=DYNAMIC;
有帮助吗?
答案 0 :(得分:1)
查询的 where 子句可以在Sequelize.JS中编写如下:
const Utils = Sequelize.Utils;
const whereClause = {
[Op.or]: [
new Utils.Where(
new Utils.Fn('LOWER', new Utils.Col('name')), {[Op.like]: `%${search}%`}
),
new Utils.Where(
new Utils.Fn('LOWER', new Utils.Col('description')), {[Op.like]: `%${search}%`}
)
]
}
如果周围有一个Sequelize
的实例,则还可以使用该实例上可用的静态方法来编写此代码:
const whereClause = {
[Op.or]: [
sequelize.where(
sequelize.fn('LOWER', sequelize.col('name')), {[Op.like]: `%${search}%`}
),
sequelize.where(
sequelize.fn('LOWER', sequelize.col('description')), {[Op.like]: `%${search}%`}
)
]
}
可以这样使用:
const getAcessories = await Acessories.findAndCountAll({
limit,
offset: start,
order: [["name", "ASC"]],
where: whereClause
});
答案 1 :(得分:0)
可能您根本不需要LOWER
。
如果列中的COLLATION
是“不区分大小写的”,则只需进行测试即可,而无需使用LOWER()
或UPPER()
。
要查看排序规则(及其他内容),请使用SHOW CREATE TABLE
。
一种测试方法是尝试使用%xyz%
和%XYZ%
。我预计两者都会给您相同的结果,因此您的排序规则不区分大小写。
特别是
问题出在表定义中的COLLATE utf8_bin
。
评论中的两个链接都不相关。一种是指“列存储”引擎,该引擎不专门用于表。另一个是指“标识符”名称-例如表和列名称,而不是列内容。
答案 2 :(得分:0)
也许您可以使用ILIKE?您可以查看文档并搜索ILIKE:http://docs.sequelizejs.com/manual/querying.html