我正在做一个express项目,我使用ORM sequelize来保持我的Mysql 8.0模式的数据持久性。我尝试执行一个简单的DELETE查询,其中我查询字段“Indicator_Name”和2020-05-25和2022-12-19之间的两个日期范围,我的模式和查询如下:
const deleteRecordsBetweenDates = async () =>{
let startDate = new Date("2020-05-25").toJSON().slice(0, 10);
let finalDate = new Date("2022-12-19").toJSON().slice(0, 10);
const deleteRecords = await indcds_scheme.destroy({
where: {
[Op.and]: [
{"Nombre_indicador": "Covid 19"},
{[Op.between] : [
{Fecha_de_inicio: "2020-05-25"},
{Fecha_de_inicio: "2022-12-19"}
]}
]
}
});
return deleteRecords;
}
router.delete("/delete", async (req, res) => {
deleteRecordsBetweenDates()
.then((result) => {
console.log(result)
return res.sendStatus(200)
})
.catch((error) => {
console.log(error)
return res.sendStatus(500)
});
});
字符串
方案:
const indcds_scheme = connection.define(
"indicador_categoría",
{
Id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true,
},
Nombre_indicador: Sequelize.DataTypes.STRING,
Descripción_indicador: Sequelize.DataTypes.INTEGER,
Valor_de_variable: Sequelize.INTEGER,
Última_actualización: Sequelize.DATE,
Fecha_de_inicio: Sequelize.DATEONLY,
Población_rural: Sequelize.INTEGER,
Población_urbana: Sequelize.INTEGER,
},
{
freezeTableName: true,
}
);
型
我跟着这个问题:https://stackoverflow-com.translate.goog/questions/46390150/sequelize-not-accepting-valid-moment-js-object-in-where-clause/46390179?_x_tr_sl=en&_x_tr_tl=es&_x_tr_hl=es-419#46390179
将日期转换为有效的mysql日期格式,但仍然存在相同的问题:
let startDate = new Date("2020-05-25").toJSON().slice(0, 10);
型
x1c 0d1x的数据
1条答案
按热度按时间mcvgt66p1#
这个问题可能与您使用Sequelize的日期范围查询选项或JSON转换的方式有关。
我认为在这种情况下,不需要使用Op.和to合并条件。因为sequelize无论如何都将where对象中的多个键隐式地视为AND操作。因此,您可以直接使用条件数组,而无需显式使用Op.and。此外,可以调整Op.between的用法以包括正确的日期范围。您可以提供一个包含两个日期的数组来表示开始和结束日期,而不是在[Op.between]中指定一个包含两个对象的数组。像这样的事
字符串
此外,您不需要将日期转换为JSON格式。如果我没有错的话,我相信Sequelize可以正确地处理日期对象。如果这不起作用,您可以尝试使用Op.gte和Op.lte。
型