首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sequelize MYSQL中相似字符串匹配

问Sequelize MYSQL中相似字符串匹配
EN

Stack Overflow用户
提问于 2021-05-04 19:28:23
回答 2查看 263关注 0票数 0

我是Sequelize和JS的新手,可能不知道所有的运算符,所以我想问一下,是否有任何方法可以从数据库中检索类似于但不完全匹配的条目。例如,我搜索的字符串是+921234567890,但在数据库中它存储为+92-1234567890,用连字符分隔国家拨号代码。我使用的数据库是MySQL。我试过了,我知道这是不正确的,但我不确定如何继续:

代码语言:javascript
复制
 where: {
        cell: {
          [Op.or]: {
            [Op.like]: "%-%",
            [Op.eq]: cellNumber,
          },
        },
EN

回答 2

Stack Overflow用户

发布于 2021-05-05 00:18:53

在与输入进行比较之前,可以使用REGEX_REPLACE() sql函数替换cell列中的任何非数字字符。使用sequelize.where()、sequelize.fn()和sequelize.col()函数生成查询。假设您的表是model,模型是Model。

代码语言:javascript
复制
const cellNumber = 1234567890;

const results = await Model.findAll({
  where: sequelize.where(
    sequelize.fn('REGEXP_REPLACE', sequelize.col('model.cell'), '[a-zA-Z]+', ''),
    '=',
    cellNumber
  ),
});

这应该会生成如下所示的SQL:

代码语言:javascript
复制
SELECT * FROM `model`
WHERE REGEXP_REPLACE(`model`.`cell`, '[a-zA-Z]+', '') = 1234567890;
票数 0
EN

Stack Overflow用户

发布于 2021-05-05 17:51:40

这个问题的解决方案是使用原始sql查询解决的,但是对于在使用REGEXP_REPLACE时寻找答案的任何人,您应该结合使用REPLACE和sequelize.literal

cell: { [Op.eq]: this.sequelize.literal("REPLACE('cell','-','')") }

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67383891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档