You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 09:20:41