Sequelize Date Range Query: Using $between and $or Operators

Dec 08, 2025 · Programming · 10 views · 7.8

Keywords: Sequelize | Date Query | MySQL | Operators

Abstract: This article explains how to query database records in Sequelize ORM where specific date columns (e.g., from or to) fall within a given range. We detail the use of the $between operator and the $or operator, discussing the inclusive behavior in MySQL, based on the best answer and supplementary references.

Overview of Sequelize Date Range Query

In database operations, date range queries are common, especially when handling time interval data. Sequelize, as a popular Node.js ORM, offers a rich set of query operators to simplify such tasks. Based on common Q&A data, this article explores how to efficiently query all records in Sequelize where either the from or to column falls within a specified date range [startDate, endDate]. We start from core concepts, analyze solutions step by step, and provide code examples to enhance understanding.

Using the $between Operator for Single-Column Query

The $between operator in Sequelize is a key tool for date range queries. It allows checking if a column's value is between two specified values. For example, to query records where only the from column is within the range, define the query condition as follows:

const where = {
    from: {
        $between: [startDate, endDate]
    }
};

Here, startDate and endDate are JavaScript Date objects. In MySQL, the $between operator is inclusive, meaning it is equivalent to the SQL expression (startDate <= from AND from <= endDate). This inclusive behavior ensures correct inclusion of boundary values, which is expected in most application scenarios.

Extending with the $or Operator for Multi-Column Query

However, the original problem requires querying records where either the from or to column is within the range. This necessitates combining multiple conditions using the $or operator. In newer versions of Sequelize, it is recommended to use Op.or and Op.between for better code clarity and maintainability:

const where = {
    [Op.or]: [{
        from: {
            [Op.between]: [startDate, endDate]
        }
    }, {
        to: {
            [Op.between]: [startDate, endDate]
        }
    }]
};

Alternatively, for backward compatibility or with older syntax, you can use $or:

const where = {
    $or: [{
        from: {
            $between: [startDate, endDate]
        }
    }, {
        to: {
            $between: [startDate, endDate]
        }
    }]
};

Both approaches correctly generate SQL queries that implement the logic (startDate <= from AND from <= endDate) OR (startDate <= to AND to <= endDate). Note that each condition in $or independently applies $between, ensuring records are returned if any column meets the range requirement.

Key Insights and Best Practices

From this analysis, we can extract several core points: First, the $between operator is fundamental for date range queries, with its inclusive behavior default in MySQL; second, the $or operator allows flexible combination of multiple query conditions, suitable for multi-column filtering scenarios. In practice, it is advisable to refer to the official Sequelize documentation for the latest operator syntax and examples. Additionally, ensure that startDate and endDate are valid Date objects to avoid query errors.

In summary, Sequelize provides powerful date range query capabilities through the $between and $or operators. With the code examples and explanations in this article, developers can easily implement complex query needs, enhancing database operation efficiency. For further questions, consulting official resources or community discussions is recommended.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.