首页 > 解决方案 > Sequelize 为 DATE 类型创建 SQL

问题描述

我正在使用 mysql 的 sequelize,我想知道是否有一种方法可以使用 sequelize 来创建如下所示的 SQL:

SELECT * FROM table WHERE DAY(dateAttribute) = 'chosen_day'
SELECT * FROM table WHERE MONTH(dateAttribute) = 'chosen_month'

我试图做这样的事情:

this.test= function () {
    let searchingDate = "2017-05%";
    return model.table.findAll({
        where: {
            dateAttribute: searchingDate 
        }
    })
}

这有效,但它给出了一个弃用警告,说它将在未来的版本中被删除。

谢谢你的帮助!

标签: mysqlsequelize.js

解决方案


找到了解决方案!

所以我使用了 sequelize.fn() 和 sequelize 的 Op.and 函数。所以解决方案是:

this.test = function () {
    return model.tableName.findAll({
        attributes: ['myAttribute'],
        where: {
            dateAttribute: {
                [sequelize.Op.and]: [
                    sequelize.where(sequelize.fn('MONTH', sequelize.col('dateAttribute')), 5),
                    sequelize.where(sequelize.fn('DAY', sequelize.col('dateAttribute')), 5),
                ]
            },
            otherAttribute: 'someValue'
        }
    })
}

此代码生成此 SQL 查询:

SELECT myAttribute FROM tableName WHERE (MONTH('dateAttribute') = 5 AND DAY('dateAttribute') = 5) AND otherAttribute = 'someValue'

我希望使你们免于进行我所做的长期研究!记住要快乐!


推荐阅读