【问题标题】:Query by Date Range for a column field in Sequelize按日期范围查询 Sequelize 中的列字段
【发布时间】:2019-07-11 06:48:01
【问题描述】:

我正在尝试使用 Sequelize 查询数据库以获取在特定日期范围内创建的项目。我使用了$between 运算符,但似乎什么也没得到。

{ where: {"createdAt":{"$between":["2018-03-31T21:00:00.000Z","2018-05-30T05:23:59.007Z"]}} }

谁能帮助我如何实现这一目标?

【问题讨论】:

    标签: node.js sequelize.js


    【解决方案1】:

    我也遇到了同样的问题,我得到了空数组作为响应。使用以下方法解决了问题:

    const Op = Sequelize.Op;
    

    然后使用[Op.between]如下图:

    where: {
      createdAt: {
        [Op.between]: ["2018-07-08T14:06:48.000Z", "2019-10-08T22:33:54.000Z"]
      }
    }
    

    希望对你有帮助:)

    【讨论】:

    • ahhh 我正在寻找类似 select * FROM table where "2021-04-13" BETWEEN start_date_column 和 end_date_column 的东西?
    【解决方案2】:

    $between 语法似乎是正确的。您使用的方式没有问题。我尝试使用以下查询进行复制

      model.findAll({
        where: {
          created_at: { 
            "$between": ["2018-03-31T21:00:00.000Z","2018-05-30T05:23:59.007Z"]
          }
        }
      })
    

    唯一的变化是,我使用created_at 而不是createdAt。确保您的列名是正确的。如果不是,它应该抛出SequelizeDatabaseError。寻找它。

    如果其他一切都正确,那么您可能没有该日期范围内的数据:)

    【讨论】:

    • 谢谢。有趣的是它对我不起作用。我尝试了更大的日期范围,但我一直得到一个空值。我将再次检查我的代码。
    • 理想情况下,您还应该使用基于符号的运算符,例如 [Op.between]:docs.sequelizejs.com/manual/tutorial/querying.html#operators(从安全角度来看更好)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多