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

Sequelize findOne中$between日期查询失效问题求助

Sequelize中findOne的$between查询未生效排查

我搞不懂为什么findOne里的$between查询不生效,相关信息如下:

原实现代码

async getSign(childrenId: number, week?: number, year?: number) {
  if (week && year) {
    const startDate = moment().year(year).week(week).startOf("week").format("YYYY-MM-DD");
    const endDate = moment().year(year).week(week).endOf("week").format("YYYY-MM-DD");
    console.log(startDate, endDate);
    const signature = await this.diarySignRepository.findOne({
      where: {
        childrenId,
        date: {
          $between: [startDate, endDate]
        }
      },
      attributes: ['sign'],
    });
    return signature?.sign;
  }
}

请求地址

http://localhost:5000/diary/sign/get/1?week=11&year=2023

数据库中存在的记录

idchildrenIddatesign
212023-03-17true

控制台输出

2023-03-12 2023-03-18
Executing (default): SELECT "sign" FROM "diary_sign" AS "DiarySign" WHERE "DiarySign"."childrenId" = '1' AND "DiarySign"."date" = '2023-02-18' LIMIT 1;

可以看到控制台打印的日期范围是2023-03-12到2023-03-18,但实际执行的SQL里date条件变成了等于2023-02-18,完全没用到$between,数据库里2023-03-17的记录也匹配不到。

替代实现(已生效)

因为找不到原因,我改用JS逻辑实现了需求:

async getStatusDiarySign(childrenId: number, week?: number, year?: number) {
  if (week && year) {
    const startDate = moment()
      .year(year)
      .week(week)
      .startOf("week")
      .format("YYYY-MM-DD");
    const endDate = moment()
      .year(year)
      .week(week)
      .endOf("week")
      .format("YYYY-MM-DD");
    console.log(startDate, endDate);
    const diarySigns = await this.diarySignRepository.findAll({
      where: {
        childrenId,
      },
    });
    let sign = false;
    diarySigns.some((diarySign) => {
      const date = moment(diarySign.date).format("YYYY-MM-DD");
      if (date >= startDate && date <= endDate) {
        sign = diarySign.sign;
        return sign;
      }
    });
    return sign;
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:59:13