Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sequelize, Raw Query by daterange

I use "sequelize": "^2.0.0-rc3" with pg (postgresql), in this moment i am trying to do a raw query with date range but sequelize don't return data.

When I run the same query in postgresql db get correct results. Please Help Me.

In 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);
  });

In console of node server I get.

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

But empty array calls...

like image 880
juvasquezg Avatar asked Dec 02 '25 08:12

juvasquezg


2 Answers

Try this:

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);
});
like image 56
Yuri Zarubin Avatar answered Dec 03 '25 22:12

Yuri Zarubin


You can also use sequelize function like 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')
  }
)
like image 25
Vinod Poorma Avatar answered Dec 03 '25 22:12

Vinod Poorma



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!