Запрос с диапазоном дат с использованием запроса Sequelize с Postgres в узле - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь получить строки между двумя датами, используя Sequelize ORM в Node.js.Я использую PostgreSQL.Проблема в том, что мой запрос неправильно интерпретируется Sequelize.

Вот код, который я использую для создания запроса

const dbresp = await Table.findAll({
  attributes: [...],
  where: {
    ...
    createdAt: {
       $between: [new Date(Date(startDate)), new Date(Date(endDate))],
       // same effect
       // $lte: new Date(startDate),
       // $gte: new Date(endDate),
    },
  },
  logging: console.log,
  raw: true,
  order: [['createdAt', 'ASC']],
  // limit: count,
});

Записывая в него необработанный запрос SQLочевидно, что запрос неправильный

SELECT ...
FROM "table" AS "table"
WHERE "table"."createdAt" = '2019-02-05 21:00:00.000 +00:00'
      "table"."createdAt" = '2019-02-05 21:00:00.000 +00:00'
ORDER BY "table"."createdAt" ASC;

Как правильно сделать такой запрос?Должен ли я использовать необработанный запрос?

Я погуглил эту проблему, но StackOverflow не помог ни GitHub.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Хорошо, IDK, что вызывает эту проблему, но я исправил ее, используя объект Op Sequelize, как это.

const Op = require('./models').Sequelize.Op;
const dbresp = await Table.findAll({
  attributes: [...],
  where: {
    ...
    createdAt: {
       [Op.between]: [startDate, endDate],
    },
  },
  logging: console.log,
  raw: true,
  order: [['createdAt', 'ASC']],
  // limit: count,
});

Похоже, $ между оператор не работает

0 голосов
/ 06 февраля 2019

Попробуйте использовать приведенный ниже код:

[Op.between]: [date1, date2]

Или необработанный запрос:

SELECT ...
FROM table t
WHERE t.createdAt BETWEEN '2019-02-05' AND '2019-02-07'
ORDER BY t.createdAt ASC;
...