【发布时间】:2019-11-04 23:49:01
【问题描述】:
有没有办法检查一个特定的字符串是否存在于表的列中?
例如,我有一个表 '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
但是通过sequelize,following有问题
var sample_fruit_string = "apple_shake";
var gsp_config = await model.fruit.findOne({where: {
fruit_name: {
[Op.like]: sample_fruit_string + '%'
}
}});
【问题讨论】:
-
你正在做
"apple" LIKE "apple_shake%",但你想要相反:"apple_shake" LIKE "apple"。虽然我还不知道如何用sequelize.js表达这一点。 -
没错!我可以通过原始查询来做到这一点。但我无法通过 sequelize 模型进行查询。也许我应该直接使用查询而不是依赖模型?
-
原始查询应该可以工作。另外,我认为您可以使用
LOCATE()MySQL 函数来表达这一点——sequelize.js支持函数,并且我认为您可以在上面的代码中将其表达为where:表达式的一部分。对于COUNT(),示例如下所示:sequelize.fn('COUNT', sequelize.col('table_column_name')),您可能可以扩展它以使用LOCATE()。但我在这里猜想,没有真正体验过这个库。 -
这不是 Sequelize 的问题,这种类型的查询用 SQL 是不可能的
-
@doublesharp 我不明白你为什么说不可能,看看这个 sqlfiddle:sqlfiddle.com/#!9/4c8192/2。我也担心效率问题,但不担心这种可能性。
标签: mysql node.js sequelize.js