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

Posted

技术标签:

【中文标题】Sequelize如何在查询中比较日期的年份【英文标题】:Sequelize How compare year of a date in query 【发布时间】:2016-12-16 02:39:12 【问题描述】:

我正在尝试进行此查询:

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

如何以 sequelize 风格执行上述查询?

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

谢谢!

【问题讨论】:

【参考方案1】:
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

【讨论】:

【参考方案2】:

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

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

【讨论】:

多个where子句不正确的解决方法,and运算符不带数组。请参阅我的建议,因为改进此解决方案的编辑被拒绝了。【参考方案3】:
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

【讨论】:

'andOp' 无法识别,因为它是 javascript 对象,而不是变量

以上是关于Sequelize如何在查询中比较日期的年份的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sequelize 基于 sqlite3 中的“日期”列进行查询?

如何使用 Sequelize 查询虚拟列?

使用 Sequelize 在 GraphQL 查询中将日期时间字段输出为字符串

如何在 sequelize ORM Query 中更改日期格式?

在MySql中、怎样根据年份或者月份查询数据表中的数据?

在MySql中、怎样根据年份或者月份查询数据表中的数据?