有没有一种方法可以检查表中的列中是否存在特定的字符串?
例如,我有一个表“ 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 + '%'
}
}});
答案 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.
}
}});