我是Sequelize和JS的新手,可能不知道所有的运算符,所以我想问一下,是否有任何方法可以从数据库中检索类似于但不完全匹配的条目。例如,我搜索的字符串是+921234567890,但在数据库中它存储为+92-1234567890,用连字符分隔国家拨号代码。我使用的数据库是MySQL。我试过了,我知道这是不正确的,但我不确定如何继续:
where: {
cell: {
[Op.or]: {
[Op.like]: "%-%",
[Op.eq]: cellNumber,
},
},发布于 2021-05-05 00:18:53
在与输入进行比较之前,可以使用REGEX_REPLACE() sql函数替换cell列中的任何非数字字符。使用sequelize.where()、sequelize.fn()和sequelize.col()函数生成查询。假设您的表是model,模型是Model。
const cellNumber = 1234567890;
const results = await Model.findAll({
where: sequelize.where(
sequelize.fn('REGEXP_REPLACE', sequelize.col('model.cell'), '[a-zA-Z]+', ''),
'=',
cellNumber
),
});这应该会生成如下所示的SQL:
SELECT * FROM `model`
WHERE REGEXP_REPLACE(`model`.`cell`, '[a-zA-Z]+', '') = 1234567890;发布于 2021-05-05 17:51:40
这个问题的解决方案是使用原始sql查询解决的,但是对于在使用REGEXP_REPLACE时寻找答案的任何人,您应该结合使用REPLACE和sequelize.literal
cell: { [Op.eq]: this.sequelize.literal("REPLACE('cell','-','')") }
https://stackoverflow.com/questions/67383891
复制相似问题