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 在 GraphQL 查询中将日期时间字段输出为字符串