Serangeize,日期范围的原始查询

时间:2015-02-05 21:54:47

标签: node.js postgresql sequelize.js

我使用" sequelize":" ^ 2.0.0-rc3"使用pg(postgresql),在这一刻我正在尝试使用日期范围进行原始查询,但是请求不要返回数据。

当我在postgresql db中运行相同的查询时获得正确的结果。请帮助我。

在sequilize中:

  // Init main query
  var query = "SELECT * FROM" + '"Calls"' +
              " WHERE "  + '"EquipmentId"' + " = 1" +
              " AND " + '"initDate"' + " >= " + "'2015-02-05 14:40' " +
              " AND " + '"endDate"' + " <= " + " '2015-02-05 15:00' ";

  global.db.sequelize.query(query)
  .then(function(calls) {
    console.log(calls);
  })
  .error(function (err) {
    console.log(err);
  });

在我得到的节点服务器的控制台中。

Executing (default): SELECT * FROM "Calls" WHERE "EquipmentId" = 1 AND "initDate" >= '2015-02-05 14:40'  AND "endDate" <=  '2015-02-05 15:00'

但是空数组调用......

3 个答案:

答案 0 :(得分:3)

试试这个:

var query = ' \
  SELECT * FROM "Calls" \
  WHERE "EquipmentId" = :EquipmentId \
  AND "initDate" >= :initDate \
  AND "endDate" <= :endDate; \
';

global.db.sequelize.query(query, null, {raw: true}, { 
  EquipmentId: 1, 
  initDate: new Date('2015-02-05 14:40'), 
  endDate: new Date('2015-02-05 15:00')
})
.then(function(calls) {
  console.log(calls);
})
.error(function (err) {
  console.log(err);
});

答案 1 :(得分:1)

您也可以使用像findAll

这样的续集功能
Model.findAll(
  where : {    
     gte:sequelize.fn('date_format', initDate, '%Y-%m-%dT%H:%i:%s'),
     lte:sequelize.fn('date_format', endDate, '%Y-%m-%dT%H:%i:%s')
  }
)

答案 2 :(得分:0)

要获得两个日期范围之间的结果,只需执行此操作。

let whereClause = { 
  where: {  $and: [  
           { time: { [ Op.gte ]: req.query.start_time } },
           { time: { [ Op.lte ]: req.query.end_time } } 
           ] 
       }
 };

 await model_name.findAll(whereClause);