Mysql 如何获取今天的sequelize js记录
我有一张与下表相似的桌子。我想找出今天所有价格的总和Mysql 如何获取今天的sequelize js记录,mysql,node.js,express,sequelize.js,Mysql,Node.js,Express,Sequelize.js,我有一张与下表相似的桌子。我想找出今天所有价格的总和 | 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
| 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语句如下
正在执行(默认):选择sum(`price`)作为`sum`,从`orders`中选择`orders`,其中`orders`.`created`='2019-05-27 18:30:00'
这里发生的事情是,您正在比较精确的时间戳,如
'2019-05-27 11:40:48'
等于'2019-05-27 18:30:00'
。所以这个比较永远不会给你一个结果,因为即使是同一天(5月27日),但时间是不同的
所以这里有一个可能的解决方案
const Op=Sequelize.Op;
const TODAY_START=new Date().setHours(0,0,0,0);
const NOW=新日期();
const SUM=等待订单模型SUM('价格'{
其中:{
创建:{
[Op.gt]:从今天开始,
现在
},
},
});
控制台日志(总和);
您需要创建如下查询:created<[NOW]和created>[TODAY\u START]
为什么?因为您将获得NOW
之后注册的所有价格的总和。此代码还将帮助您获取一系列日期的总数
PostgreSQL的替代方案
请注意,PostgreSQL允许您截断到特定的时间间隔。因此,您可以调用sequelize.fn()
方法来创建一个可以调用“date\u trunc”的查询。像这样:
const SUM=wait OrdersModel.SUM('price'){
其中:{
sequelize.fn(“当前日期”):{
[Op.eq]:sequelize.fn('date\u trunc','day',sequelize.col('created'))
}
},
});
控制台日志(总和);
还请记住更新到:
npm-isequelize@5.8.6--s
这里发生的事情是,您正在比较精确的时间戳,如'2019-05-27 11:40:48'
等于'2019-05-27 18:30:00'
。所以这个比较永远不会给你一个结果,因为即使是同一天(5月27日),但时间是不同的
所以这里有一个可能的解决方案
const Op=Sequelize.Op;
const TODAY_START=new Date().setHours(0,0,0,0);
const NOW=新日期();
const SUM=等待订单模型SUM('价格'{
其中:{
创建:{
[Op.gt]:从今天开始,
现在
},
},
});
控制台日志(总和);
您需要创建如下查询:created<[NOW]和created>[TODAY\u START]
为什么?因为您将获得NOW
之后注册的所有价格的总和。此代码还将帮助您获取一系列日期的总数
PostgreSQL的替代方案
请注意,PostgreSQL允许您截断到特定的时间间隔。因此,您可以调用sequelize.fn()
方法来创建一个可以调用“date\u trunc”的查询。像这样:
const SUM=wait OrdersModel.SUM('price'){
其中:{
sequelize.fn(“当前日期”):{
[Op.eq]:sequelize.fn('date\u trunc','day',sequelize.col('created'))
}
},
});
控制台日志(总和);
还请记住更新到:
npm-isequelize@5.8.6--s
添加日期函数,在不考虑时间的情况下进行日期比较
const TODAY = new Date();
const SUM = await OrdersModel.sum('price', {
where: {
sequelize.fn('CURRENT_DATE'): {$eq: sequelize.fn('date_trunc', 'day', sequelize.col('created'))}
},
});
console.log(SUM);
添加DATE函数进行日期比较,不考虑时间
const TODAY = new Date();
const SUM = await OrdersModel.sum('price', {
where: {
sequelize.fn('CURRENT_DATE'): {$eq: sequelize.fn('date_trunc', 'day', sequelize.col('created'))}
},
});
console.log(SUM);
利用时间会更容易
const moment = require('moment');
const Op = require('sequelize').Op;
const SUM = await OrdersModel.sum('price', {
where : {
created_at : { [Op.gt] : moment().format('YYYY-MM-DD 00:00')},
created_at : { [Op.lte] : moment().format('YYYY-MM-DD 23:59')}
},
});
console.log(SUM);
利用时间会更容易
const moment = require('moment');
const Op = require('sequelize').Op;
const SUM = await OrdersModel.sum('price', {
where : {
created_at : { [Op.gt] : moment().format('YYYY-MM-DD 00:00')},
created_at : { [Op.lte] : moment().format('YYYY-MM-DD 23:59')}
},
});
console.log(SUM);
您还可以使用
Sequelize.literal
:
const { Op } = Sequelize;
const options = {
where: {}
};
options[Op.and] = [
sequelize.where(Sequelize.literal('DATE(created) = CURDATE()'))
]
const SUM = await OrdersModel.sum('price', options);
console.log(SUM);
如果没有未来日期,您可以像下面这样查询
options[Op.and] = [
sequelize.where(sequelize.col('created'), {
[Op.gt]: Sequelize.literal('DATE_SUB(CURDATE(), INTERVAL 1 DAY)')
})
]
const SUM = await OrdersModel.sum('price', options);
console.log(SUM);
您还可以使用
Sequelize.literal
:
const { Op } = Sequelize;
const options = {
where: {}
};
options[Op.and] = [
sequelize.where(Sequelize.literal('DATE(created) = CURDATE()'))
]
const SUM = await OrdersModel.sum('price', options);
console.log(SUM);
如果没有未来日期,您可以像下面这样查询
options[Op.and] = [
sequelize.where(sequelize.col('created'), {
[Op.gt]: Sequelize.literal('DATE_SUB(CURDATE(), INTERVAL 1 DAY)')
})
]
const SUM = await OrdersModel.sum('price', options);
console.log(SUM);
我们还可以使用[op.between],它将获取两个给定日期范围之间的数据。因此,如果我们给出今天的开始时间和当前时间,它将给出今天的数据
const Op = Sequelize.Op;
const START = new Date();
START.setHours(0, 0, 0, 0);
const NOW = new Date();
where: {
createdAt: {
[Op.between]: [START.toISOString(), NOW.toISOString()]
}
}
快乐编码…我们也可以使用[op.between],它将获取两个给定日期范围之间的数据。因此,如果我们给出今天的开始时间和当前时间,它将给出今天的数据
const Op = Sequelize.Op;
const START = new Date();
START.setHours(0, 0, 0, 0);
const NOW = new Date();
where: {
createdAt: {
[Op.between]: [START.toISOString(), NOW.toISOString()]
}
}
快乐编码…您好,添加日期函数是什么意思?使用日期函数,您将与日期值进行比较,它将忽略hh:mm:ss值是我应该编写的自定义函数还是sequelize的一部分?参考注释部分中的更新代码,它是一个内置函数sequelize.fn('DATE\u trunc','day',sequelize.col(“YouDATeField'”)所以它只考虑日期部分,你不能使用一个函数,一个对象键,这会导致一个错误。SytRealError:意外标记。{您好,添加日期函数是什么意思?使用日期函数,您将与日期值进行比较,它将忽略hh:mm:ss值它是我应该编写的自定义函数还是sequelize的一部分?参考注释部分中的更新代码,它是一个内置函数sequelize.fn('DATE_trunc','day',sequelize.col YourDateField'))因此,它只考虑日期部分,不能使用一个函数,一个对象键,这会导致一个错误。{嗨,我仍然得到0的总和,并且终端上执行的SQL查询没有任何更改。嗨,尝试使用小于来查看您得到的结果可能是另一个partOp中的错误。lt给出了一个值。它如何正确地给出以前所有日期的总和。然后尝试这个替代方法,我想我知道发生了什么。您是否正在比较精确的timestamps??如
'2019-05-27 11:40:48'
等于'2019-05-27 18:30:00'
此比较不会给出结果,因为是同一天(5月27日)但是时间不同。是的,所以我尝试使用Op.gt和Today date,并将时间更改为午夜。这很有效。您好,我仍然将总和设置为0,并且在终端上执行的SQL查询中没有任何更改。嘿,尝试使用小于来查看您得到了什么