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

我正在尝试进行此查询:

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

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

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

谢谢!

【问题讨论】:

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


    【解决方案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 对象,而不是变量
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 2014-08-01
      • 2021-08-17
      相关资源
      最近更新 更多