Sequelize 如何比较查询中日期的年份

问题描述 投票:0回答:3

我正在尝试提出这个查询:

SELECT * FROM TABLEA AS A WHERE YEAR(A.dateField)='2016'

如何以续集风格执行上面的查询?

TABLEA.findAll({
      where:{}//????
     }

谢谢!

javascript mysql node.js datetime sequelize.js
3个回答
21
投票
TABLEA.findAll({
  where: sequelize.where(sequelize.fn('YEAR', sequelize.col('dateField')), 2016)
 });

这里必须使用

.where
,因为表达式的左边(键)是一个对象,所以不能在常规 POJO 风格中用作对象键。

如果您想将其与其他条件结合使用,您可以这样做:

TABLEA.findAll({
  where: {
    $and: [
      sequelize.where(sequelize.fn('YEAR', sequelize.col('dateField')), 2016),
      { foo: 'bar' }
    ]
  }
 });

https://sequelize.org/v3/docs/querying/#operators


4
投票

您必须将

date_part
函数添加到您的查询中:

sequelize.where(sequelize.fn("date_part",'year',sequelize.col('dateField')), 2020)

0
投票

如果您对sequelize.where有疑问,请尝试将其包装到and中:

          where: { 
             [Op.and]:  [
              sequelize.where(sequelize.fn('YEAR', sequelize.col('dateField')), 2016)
            ]

           },

不要忘记

         const { Op } = require("sequelize");
© www.soinside.com 2019 - 2024. All rights reserved.