【问题标题】:Sequelize - case-insensitive likeSequelize - 不区分大小写
【发布时间】:2017-06-03 08:08:45
【问题描述】:

如何在 Sequelize 中实现这一点?

SELECT * FROM table where lower(column) LIKE ('abcd%');

我找不到将 lower 函数与 $like

混合使用的方法

【问题讨论】:

  • 我了解到,在 MySQL 中,您不需要在列上调用 lower()Like 隐含地是不区分大小写的搜索。如果不是 utf8,则 YMMV 取决于您的排序规则/字符集。

标签: mysql node.js sequelize.js


【解决方案1】:

我遇到了类似的问题并解决了

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, },
});

【讨论】:

    【解决方案2】:

    你应该使用 Sequelize.Op :

    Table.findAll({
        where: {
            name: {
                [Sequelize.Op.iLike]: searchQuery
            }
        }
    })
    

    如果您想进行部分查询,请不要忘记在您的 searchQuery 之前或之后添加 %。

    See the docs here

    【讨论】:

    • FWIW,MySQL 不支持 ILIKE
    • 这仅适用于 PG
    【解决方案3】:

    我找到了解决办法:

    Table.findAll({
      attributes: ['createdAt', 'col'],
      where: {
        $and:[
          {
            createdAt:{
              $between:[minDate, maxDate]
            }
          },
          Sequelize.where(
            Sequelize.fn('lower', Sequelize.col('col')),
            {
              $like: 'abcd%'
            }
          )
        ]
      }
    });
    

    【讨论】:

    • 解决方案是什么? % 符号?
    • 解决方案是where()fn()之间的组合
    • 那么新方法是什么...“未处理的拒绝错误:对{where: 'raw query'} 的支持已被删除。” ?就像 SQL 中的许多“稍微先进但并不可怕”的事情一样,其中 Sequelize 混合在一起,我发现只是旋转并长时间执行它最终会变慢,但在回顾代码 6 个月或时更具可读性和可维护性一年后。 :\
    • 我不得不在 col 方法中添加表名(在相应模型中定义):Sequelize.col('table.col')
    【解决方案4】:

    如果您使用 PostGres,则可以使用 $iLike 运算符搜索行(不是您的问题所要求的列名)。

    Sequelize Docs

    虽然它没有完全解决您的问题,但希望它可以帮助那些搜索不区分大小写 + Sequelize 的人,这将我带到这里。

    Table.findAll({
        where: {
            createdAt: {
                $between: [minDate, maxDate]
            },
            someOtherColumn: {
                $like: '%mysearchterm%'
            }
        }
    })
    

    【讨论】:

      猜你喜欢
      • 2017-06-26
      • 2012-12-01
      • 2013-03-06
      • 2020-02-18
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      相关资源
      最近更新 更多