Sequelize 中如何实现时间范围查询

阅读时长 5 分钟读完

Sequelize 是一个基于 Node.js 的 ORM(Object-Relational Mapping)框架,支持多种数据库,包括 MySQL、PostgreSQL、SQLite 和 MSSQL。在实际开发中,我们经常需要根据时间范围来查询数据库中的数据。本篇文章将介绍如何在 Sequelize 中实现时间范围查询,包括日期范围、时间范围和日期时间范围的查询。

日期范围查询

假设我们有一个名为 orders 的表格,其中包含了订单的创建时间(created_at)和订单状态(status)等信息。现在我们需要查询某一天内的所有已支付订单(status 为 paid)。在 Sequelize 中可以通过以下代码实现:

-- -------------------- ---- -------
----- --------- - --- --------------------- ----------- ----------- -
  -------- --------
  ----- ------------
---

----- ----- - ------------------------- -
  ----------- -
    ----- -------------------
    ---------- ------
    ------------- --------------
  --
  ------- -
    ----- ---------------------
    ---------- ------
  --
---

----- --------- - --- -------------------
----- ------- - --- -------------------

---------------
  ------ -
    ------- -------
    ----------- -
      ------------- ----------- ---------
    --
  --
--
  -------------- -- -
    --------------------
  --
  -------------- -- -
    ---------------------
  ---

上述代码中,我们使用 Sequelize 的 Op.between 运算符来实现日期范围查询。[startDate, endDate] 表示查询 startDate 到 endDate 之间的数据。需要注意的是,在定义 Order 模型时,created_at 的类型必须为 Sequelize.DATEONLY,以保证只保存日期而不保存时间。

时间范围查询

除了日期范围查询,我们还可以实现时间范围查询。假设我们需要查询下午 2 点到晚上 10 点之间的所有订单,可以使用以下代码:

-- -------------------- ---- -------
----- --------- - --- ---------------------------------
----- ------- - --- ---------------------------------

---------------
  ------ -
    ------- -------
    ----------- -
      --------- ----------
      --------- --------
    --
  --
--
  -------------- -- -
    --------------------
  --
  -------------- -- -
    ---------------------
  ---

通过使用 Op.gteOp.lte 运算符,我们可以实现数据在 startTime 和 endTime 之间的查询。

需要注意的是,如果模型中的时间字段(如 created_at)的类型为 Sequelize.DATE,则需要查询的时间范围必须带有时间戳信息,否则会导致查询结果不准确。例如,如果查询晚上 10 点到晚上 11 点之间的数据,则应该使用以下代码:

日期时间范围查询

最后,我们介绍如何实现日期时间范围查询。假设我们需要查询 2022 年 1 月 1 日 14 点到 2022 年 1 月 2 日 10 点之间的所有订单,可以使用以下代码:

-- -------------------- ---- -------
----- --------- - --- ---------------------------------
----- ------- - --- ---------------------------------

---------------
  ------ -
    ------- -------
    ----------- -
      --------- ----------
      --------- --------
    --
  --
--
  -------------- -- -
    --------------------
  --
  -------------- -- -
    ---------------------
  ---

与时间范围查询类似,需要注意的是,如果模型中的时间字段的类型为 Sequelize.DATE,则需要查询的时间范围必须带有时间戳信息。

总结

本篇文章介绍了在 Sequelize 中实现时间范围查询的方法,包括日期范围、时间范围和日期时间范围的查询。在实际开发中,根据具体需求选择适合的查询方式能够提高查询效率和准确性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64592e6d968c7c53b0b6b183

纠错
反馈