Sequelize.js Sequelize查询-比较两列中的日期
我在Sequelize中有一个表,其中包含两个日期列,即:Sequelize.js Sequelize查询-比较两列中的日期,sequelize.js,Sequelize.js,我在Sequelize中有一个表,其中包含两个日期列,即: var Visit = sequelize.define("Visit", { /*...*/ scheduleEndDate: { type: DataTypes.DATE } actualEndDate: { type: DataTypes.DATE } /*...*/ }); 我想做一个查询,返回actualEndDate在scheduleEndDate之前的行,但无法获得正确的格式。我为
var Visit = sequelize.define("Visit", {
/*...*/
scheduleEndDate: {
type: DataTypes.DATE
}
actualEndDate: {
type: DataTypes.DATE
}
/*...*/
});
我想做一个查询,返回actualEndDate在scheduleEndDate之前的行,但无法获得正确的格式。我为where
部分的findAll
查询所做的尝试是:
where: { actualEndDate: { lt: Visit.scheduleEndDate } }
-由于未定义访问而引发错误(也尝试过使用this.scheduleEndDate-也引发错误)
其中:{actualEndDate:'
-将actualEndDate与字符串“我是否需要定义一个实例方法来进行日期比较/如何最好地解决问题?这应该可以通过
where: { actualEndDate: { $lt: sequelize.col('scheduleEndDate') } }
在最新版本(v5)中,您需要使用Sequelize.Op
所有操作:
Project.findAll({
where: {
id: {
[Op.and]: {a: 5}, // AND (a = 5)
[Op.or]: [{a: 5}, {a: 6}], // (a = 5 OR a = 6)
[Op.gt]: 6, // id > 6
[Op.gte]: 6, // id >= 6
[Op.lt]: 10, // id < 10
[Op.lte]: 10, // id <= 10
[Op.ne]: 20, // id != 20
[Op.between]: [6, 10], // BETWEEN 6 AND 10
[Op.notBetween]: [11, 15], // NOT BETWEEN 11 AND 15
[Op.in]: [1, 2], // IN [1, 2]
[Op.notIn]: [1, 2], // NOT IN [1, 2]
[Op.like]: '%hat', // LIKE '%hat'
[Op.notLike]: '%hat', // NOT LIKE '%hat'
[Op.iLike]: '%hat', // ILIKE '%hat' (case insensitive) (PG only)
[Op.notILike]: '%hat', // NOT ILIKE '%hat' (PG only)
[Op.overlap]: [1, 2], // && [1, 2] (PG array overlap operator)
[Op.contains]: [1, 2], // @> [1, 2] (PG array contains operator)
[Op.contained]: [1, 2], // <@ [1, 2] (PG array contained by operator)
[Op.any]: [2,3] // ANY ARRAY[2, 3]::INTEGER (PG only)
},
status: {
[Op.not]: false // status NOT FALSE
}
}
})
Project.findAll({
其中:{
身份证:{
[Op.and]:{a:5}、//和(a=5)
[Op.or]:[{a:5},{a:6}],//(a=5或a=6)
[Op.gt]:6,//id>6
[Op.gte]:6,//id>=6
[Op.lt]:10,//id<10
[Op.lte]:10,//id[1,2](PG阵列包含运营商)
[Op.contained]:[1,2],//是的-这很有效。删除了我不正确的响应。谢谢。请您解释一下为什么这样做?我很难理解创建列对象如何帮助比较日期。谢谢!$lt
转换为运算符(Aah,这完全有道理。感谢您的洞察力!
const Op = Sequelize.Op;
...
where: {
actualEndDate: {
[Op.lt]: sequelize.col('scheduleEndDate')
}
}
Project.findAll({
where: {
id: {
[Op.and]: {a: 5}, // AND (a = 5)
[Op.or]: [{a: 5}, {a: 6}], // (a = 5 OR a = 6)
[Op.gt]: 6, // id > 6
[Op.gte]: 6, // id >= 6
[Op.lt]: 10, // id < 10
[Op.lte]: 10, // id <= 10
[Op.ne]: 20, // id != 20
[Op.between]: [6, 10], // BETWEEN 6 AND 10
[Op.notBetween]: [11, 15], // NOT BETWEEN 11 AND 15
[Op.in]: [1, 2], // IN [1, 2]
[Op.notIn]: [1, 2], // NOT IN [1, 2]
[Op.like]: '%hat', // LIKE '%hat'
[Op.notLike]: '%hat', // NOT LIKE '%hat'
[Op.iLike]: '%hat', // ILIKE '%hat' (case insensitive) (PG only)
[Op.notILike]: '%hat', // NOT ILIKE '%hat' (PG only)
[Op.overlap]: [1, 2], // && [1, 2] (PG array overlap operator)
[Op.contains]: [1, 2], // @> [1, 2] (PG array contains operator)
[Op.contained]: [1, 2], // <@ [1, 2] (PG array contained by operator)
[Op.any]: [2,3] // ANY ARRAY[2, 3]::INTEGER (PG only)
},
status: {
[Op.not]: false // status NOT FALSE
}
}
})