我有一个类似于下表的表格。我试图找出今天所有价格的总和。
| id| price | created |
|---|-------|----------------------|
| 0 | 500 | 2018-04-02 11:40:48 |
| 1 | 2000 | 2018-04-02 11:40:48 |
| 2 | 4000 | 2018-07-02 11:40:48 |
下面的代码是我想出的,但它似乎不起作用。
const TODAY = new Date();
const SUM = await OrdersModel.sum('price', {
where: {
created: TODAY,
},
});
console.log(SUM);
即使今天有条目,SUM 的值为 0。我也尝试了以下但它也没有用。
const TODAY = new Date();
const SUM = await OrdersModel.sum('price', {
where: {
created: Sequelize.DATE(TODAY),
},
});
console.log(SUM);
在终端查询到的SQL语句如下。
Executing (default): SELECT sum(`price`) AS `sum` FROM `orders` AS `orders` WHERE `orders`.`created` = '2019-05-27 18:30:00';
最佳答案
这里的问题是您正在比较像 '2019-05-27 11:40:48'
这样的时间戳和 '2019-05-27 18:30:00'
.所以,如果我们比较它们,它永远不会给我们 true
。结果是因为即使是同一天(5 月 27 日),时间也不同。
这是一个可能的解决方案。
const Op = Sequelize.Op;
const TODAY_START = new Date().setHours(0, 0, 0, 0);
const NOW = new Date();
const SUM = await OrdersModel.sum('price', {
where: {
created: {
[Op.gt]: TODAY_START,
[Op.lt]: NOW
},
},
});
console.log(SUM);
您需要创建这样的查询:created < [NOW] AND created > [TODAY_START]
为什么? 因为您将得到在 NOW
之后注册的所有价格的总和.此代码还将帮助您获取一系列日期的总数。
PostgreSQL 的替代品
请注意,PostgreSQL 允许您截断到特定的时间间隔。因此,您可以调用 sequelize.fn()
方法来创建一个调用“date_trunc”的查询,您可以 read more in this link .像这样:
const SUM = await OrdersModel.sum('price', {
where: {
sequelize.fn('CURRENT_DATE'): {
[Op.eq]: sequelize.fn('date_trunc', 'day', sequelize.col('created'))
}
},
});
console.log(SUM);
同时记得更新到latest version :
npm i sequelize@5.8.6 --s
关于mysql - 如何获取今天的 sequelize js 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56340151/