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
相关产品推荐
相关产品推荐

