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

Node.js Sequelize 如何查询当前处于展示有效期的商品数据

Sequelize 时间区间查询实现方案

你需要先从sequelize中引入literal工具用于拼接原生SQL表达式,完整实现代码如下:

// 提前导入依赖
const { Op, literal } = require('sequelize');

const dateTimeNow = new Date();
const productData = await productModel.findAll({
  where: {
    [Op.and]: [
      // 条件1:商品开始展示时间早于等于当前时间
      { startDate: { [Op.lte]: dateTimeNow } },
      // 条件2:开始时间叠加展示时长后晚于等于当前时间,参数化写法避免SQL注入
      // 注:此处默认duration存储单位为小时,可根据实际业务的存储单位调整INTERVAL后的单位,如SECOND/MINUTE/DAY
      literal('DATE_ADD(startDate, INTERVAL duration HOUR) >= ?', dateTimeNow)
    ]
  }
});

如果你使用PostgreSQL数据库,时间运算的写法对应调整即可:

literal(`startDate + (duration || ' hours')::INTERVAL >= ?`, dateTimeNow)

注意事项

  • 请确保duration字段的存储单位和SQL表达式中写的时间单位完全匹配,避免运算结果出现偏差
  • 如果业务有时区要求,可在SQL表达式中额外补充时区转换逻辑即可适配

内容的提问来源于stack exchange,提问作者Amr Aboras

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:57:04