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

将指定SQL查询转换为等价Sequelize查询的技术问询

如何将指定SQL转换为等价的Sequelize查询?

首先明确你的需求:把这条SQL转换成Sequelize查询,且保证结果完全一致:

原SQL查询:

SELECT * FROM logs WHERE createdAt >= '2020-06-24 00:00:00' AND createdAt <= '2020-06-26 23:59:59' AND targetId = 192 AND `type` = 1

你的当前实现其实已经完全符合要求了,生成的查询逻辑和原SQL完全一致。不过我可以给你提个小优化建议——把createdAt的两个范围条件合并到同一个对象里,这样代码更简洁,可读性也更好,效果完全不变:

// 别忘了先导入Sequelize的Op操作符
const { Op } = require('sequelize');

const query = {
  createdAt: {
    [Op.gte]: startDate, // 对应SQL里的 >= '2020-06-24 00:00:00'
    [Op.lte]: endDate    // 对应SQL里的 <= '2020-06-26 23:59:59'
  },
  targetId: userId,      // 对应SQL里的 targetId = 192
  type: 1                // 对应SQL里的 `type` = 1
};

补充说明:

  1. Sequelize默认会把顶级的查询条件用AND连接,所以不需要显式包裹[Op.and](当然你原来的写法也完全正确,只是多了一层不必要的嵌套)。
  2. 确保startDate和endDate是符合格式的日期字符串(比如你SQL里的'2020-06-24 00:00:00')或者Date对象,Sequelize会自动处理成正确的SQL条件。
  3. 一定要导入Op对象,否则[Op.gte]这类操作符会无法被识别,导致查询出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:23:12