Sequelize:如何检查表中是否存在子字符串

时间:2019-06-22 11:28:50

标签: mysql node.js sequelize.js

有没有一种方法可以检查表中的列中是否存在特定的字符串?

例如,我有一个表“ fruits”,其中有两列,主键和fruit_name以及其后的行

1 apple
2 orange
3 pineapple

我有一个名为apple_shake的示例字符串。我需要检查此apple_shake的子字符串是否存在。查询应返回包含“ apple”的行

我知道如何在mysql查询中完成-SQL - Query to find if a string contains part of the value in Column

但是通过续集,跟随有问题

var sample_fruit_string = "apple_shake";
var gsp_config  = await model.fruit.findOne({where: {
    fruit_name: {
        [Op.like]: sample_fruit_string + '%'
    }
}});

3 个答案:

答案 0 :(得分:1)

为我不知道的SQL提供@alx的信用-这是如何使用Sequelize生成适当的SQL。请注意,这可能不适用于大型数据集。

const sample_fruit_string = "apple_shake"; 

const gsp_config = await model.fruit.findOne({
  attributes: ['id'],
  where: Sequelize.where(
      Sequelize.fn('LOCATE', Sequelize.col('fruit_name'), sample_fruit_string),
      Sequelize.Op.ne,
      0
  ),
  logging: true,
});

生成以下内容:

SELECT `id` FROM `fruit` AS `fruit` WHERE LOCATE(`fruit_name`, 'apple_shake') != 0 LIMIT 1;

答案 1 :(得分:1)

Sequelize has a substring operator,您可以直接使用它来解决此问题。

var sample_fruit_string = "apple_shake";
var gsp_config  = await model.fruit.findOne({where: {
    fruit_name: {
        [Op.substring]: sample_fruit_string // LIKE '%sample_fruit_string%'
    }
}});

答案 2 :(得分:0)

var sample_fruit_string = "apple_shake";
var gsp_config  = await model.fruit.findOne({where: {
fruit_name: {
    [Op.like]: `%${sample_fruit_string}%` // LIKE '%sample_fruit_string%'
   //  [Op.ilike]: `%${sample_fruit_string}%` // For case sensitive searching
   // [Op.substring]: sample_fruit_substring  // Has been depreciated in future version of sequelize.
}
}});