2015-02-05 2 views
2

Я использую «sequelize»: «^ 2.0.0-rc3» с pg (postgresql), в этот момент я пытаюсь выполнить необработанный запрос с диапазоном дат, возвращать данные.Sequelize, Raw Query by daterange

Когда я запускаю тот же запрос в 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' 

Но пустой массив называет ...

+0

Что произойдет, если вы используете 'psql' для запустить этот точный запрос? – Andomar

+0

Проблема в том, что в secelize нет временной части. Как добавить временную часть для продолжения. – juvasquezg

ответ

2

Попробуйте это:

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); 
}); 
+0

Спасибо. Get error – juvasquezg

+0

'' 'bash Выполнение (по умолчанию): SELECT * FROM« Вызывает »WHERE« EquipmentId »=: EquipmentId И« initDate »> =: initDate И« endDate »<=: endDate; Возможно необработанный TypeError: Не удается прочитать свойство '1' из null '' ' – juvasquezg

+0

Я обновил свой ответ, попробуйте добавить null как второй параметр, например. db.sequelize.query (query, null, {raw: true}, –

0

Вы также можете использовать функцию sequelize как

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') 
}