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

时间:2016-08-09 21:57:57

标签: javascript mysql node.js datetime sequelize.js

我正在尝试进行此查询:

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

如何在续集风格中执行上述查询?

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

谢谢!

3 个答案:

答案 0 :(得分:12)

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' }
    ]
  }
 });

http://docs.sequelizejs.com/en/v3/docs/querying/

答案 1 :(得分:0)

您必须在查询中添加date_part函数:

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

答案 2 :(得分:0)

TABLE.findAll({
  where: sequelize.where(sequelize.fn('YEAR', sequelize.col('dateField')), 2016)
 });

这里必须使用.where,因为表达式(键)的左侧是一个对象,所以不能以常规POJO样式将其用作对象键。

如果要将其与其他条件结合使用,可以执行以下操作:

var Sequelize require('sequelize')
var Op = Sequelize.Op
let andOp = Op.and

TABLE.findAll({
  where: {
     foo: 'bar',
     andOp:sequelize.where(sequelize.fn('YEAR', sequelize.col('dateField')), 2016)   
  }
 });

https://sequelize.org/v5/manual/querying.html#operators