gpt4 book ai didi

node.js - 在 where 上使用 Sequelize 函数

转载 作者:行者123 更新时间:2023-12-03 22:18:21 24 4
gpt4 key购买 nike

我在 Node 12 上使用 sequelize 5.21.2。

我想要这样:

SELECT `id`
FROM `order`
WHERE (substr(`order`.`code`,1,8) >= '20200101'
AND substr(`order`.`code`,1,8) <= '20201230')

所以我是这样写的:

return Model.order.findAll({
attributes: [
'id',
],
where: {
[sequelize.fn('substr', Model.sequelize.col('code'), 1, 8)]: {
[Op.gte]: params.start_date,
[Op.lte]: params.end_date,
},
},
});

但它返回:

SELECT `order`.`id`
FROM `order`
WHERE (`order`.`[object Object]` >= '20200101'
AND `order`.`[object Object]` <= '20201230')

我试过了

[sequelize.literal('STR_TO_DATE(substr(code,1,8),\'%Y %m %d\')'), 'order_date']
[sequelize.literal('STR_TO_DATE(substr(code,1,8),\'%Y %m %d\')')]
[sequelize.fn('substr', Model.sequelize.col('code'), 1, 8)]

但当我SELECT 时它们工作正常,但不是WHERE

如何获得我想要的结果?我在官方手册中找不到任何相关信息.. ( https://sequelize.org/v5/manual/querying.html#where )

最佳答案

使用 sequelize.whereOp.and 使用函数而不是列生成 select 语句。请参阅 Sequelize 文档中的此页面 - Advanced queries with functions (not just columns)

const { sequelize, order } = Model;
return order.findAll({
attributes: [
'id',
],
where: {
[Op.and]: [
sequelize.where(sequelize.fn('substr', sequelize.col('code'), 1, 8), {
[Op.gte]: params.start_date,
}),
sequelize.where(sequelize.fn('substr', sequelize.col('code'), 1, 8), {
[Op.lte]: params.end_date,
}),
],
},
});

关于node.js - 在 where 上使用 Sequelize 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64057493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com