如何不使用Sequelize.literal获取MySQL数据库中昨日总销售额?
解决方案
可以通过原生JavaScript的Date对象生成前一天的时间范围,结合Sequelize的[Op.between]操作符来实现,完全不需要Sequelize.literal和moment.js:
const Sequelize = require('sequelize') const { Op } = require('sequelize') const getSalesAmount = async () => { // 生成昨天的起始时间(00:00:00) const yesterdayStart = new Date(); yesterdayStart.setDate(yesterdayStart.getDate() - 1); yesterdayStart.setHours(0, 0, 0, 0); // 生成今天的起始时间(00:00:00)作为结束边界 const todayStart = new Date(); todayStart.setHours(0, 0, 0, 0); const grand = await CoreOrder.sum('grandTotal', { where: { orderState: { [Op.not]: 'incomplete' }, createdAt: { [Op.between]: [yesterdayStart, todayStart] } } }); return grand; }
说明
- 这种方式通过原生
Date对象精准定位前一天的时间区间,避免了直接写SQL字面量的耦合问题 - 使用
Op.between匹配createdAt在昨天0点到今天0点之间的记录,比直接匹配日期值更准确(尤其当createdAt是带时分秒的DATETIME类型时)
内容的提问来源于stack exchange,提问作者Maker
相关产品推荐
相关产品推荐

