#node.js #select #orm #sequelize.js
#node.js #выберите #orm #sequelize.js
Вопрос:
Я новичок Node Js
, в моем Node Js
проекте я использую sequelize ORM
с MySql
базой данных.
Это мой запрос, я хочу написать запрос выбора по месяцам.
Это мой запрос SELECT * FROM cubbersclosure WHERE MONTH(fromDate) = '04'
Здесь fromDate
тип поля date
Это мой код:
var fromDate = '2019-04-01'
var fromDateMonth = new Date(fromDate);
var fromMonth = (fromDateMonth.getMonth() 1) < 10 ? '0' (fromDateMonth.getMonth() 1) : (fromDateMonth.getMonth() 1);
CubbersClosure.findAll({
where:{
// select query with Month (04)... //fromMonth
}
}).then(closureData=>{
res.send(closureData);
}).catch(error=>{
res.status(403).send({status: 'error', resCode:200, msg:'Internal Server Error...!', data:error});
});
Здесь
fromMonth
указан только месяц с даты, поэтому я хочу написать код выбора запроса по месяцам.
Ответ №1:
Я не уверен, но как насчет попробовать это?
where: {
sequelize.where(sequelize.fn("month", sequelize.col("fromDate")), fromMonth)
}
Комментарии:
1. Я получил ошибку, похожую на
D:my_projectchoose_cubbyinternal-testappcontrollercubbercubbers.controller.js:907 sequelize.where()
2. Итак, измените код следующим
where: { $and: sequelize.where(sequelize.fn("monthc", sequelize.col("fromDate")), fromMonth) }
образом, но снова он показывает ошибку3. как насчет замены monthc на month? произошла опечатка
4. Это ошибка
FUNCTION choose_cubby.monthc does not exist
Ответ №2:
для тех из вас, кто ищет postgres, это несколько хакерский способ заставить это работать (обязательно протестируйте это):
const results = await models.users.findAll({
where: this.app.sequelize.fn('EXTRACT(MONTH from "createdAt") =', 3)
});
вы также можете сделать еще один шаг и запросить несколько атрибутов следующим образом:
const results = await models.table.findAll({
where: {
[Op.and] : [
this.app.sequelize.fn('EXTRACT(MONTH from "createdAt") =', 3),
this.app.sequelize.fn('EXTRACT(day from "createdAt") =', 3),
]
}
});