Как получить секвелизировать JS записи на сегодня - PullRequest
1 голос
/ 28 мая 2019

У меня есть таблица, которая выглядит аналогично таблице ниже.Я пытаюсь найти сумму всех цен на СЕГОДНЯ.

| id| price |       created        |
|---|-------|----------------------|
| 0 |  500  | 2018-04-02 11:40:48  |
| 1 | 2000  | 2018-04-02 11:40:48  |
| 2 | 4000  | 2018-07-02 11:40:48  |

Ниже приведен код, который я придумал, но он, похоже, не работает.

const TODAY = new Date();
const SUM = await OrdersModel.sum('price', {
    where: {
      created: TODAY,
    },
});
console.log(SUM);

ЗначениеСумма равна 0, хотя на сегодня есть записи.Я также попробовал следующее, но оно тоже не сработало.

const TODAY = new Date();
const SUM = await OrdersModel.sum('price', {
    where: {
      created: Sequelize.DATE(TODAY),
    },
});
console.log(SUM);

Оператор SQL, запрошенный на терминале, выглядит следующим образом.

Выполнение (по умолчанию): SELECT sum (`цена`) КАК` сумма` ИЗ `заказов` КАК` заказов` ГДЕ `заказов`.created` = '2019-05-27 18:30:00';

Ответы [ 2 ]

1 голос
/ 28 мая 2019

Добавьте ФУНКЦИЮ ДАТЫ для сравнения дат без учета времени

const TODAY = new Date();
const SUM = await OrdersModel.sum('price', {
    where: {
      sequelize.fn('CURRENT_DATE'): {$eq:  sequelize.fn('date_trunc', 'day', sequelize.col('created'))}
    },
});
console.log(SUM);
1 голос
/ 28 мая 2019

Здесь происходит то, что вы сравниваете точные временные метки, например '2019-05-27 11:40:48' и '2019-05-27 18:30:00'. Так что это сравнение никогда не даст вам результата, потому что даже если это один и тот же день (27 мая), но время отличается.

Так что здесь у вас есть возможное решение.

const Op = Sequelize.Op;
const TODAY_START = new Date().setHours(0, 0, 0, 0);
const NOW = new Date();

const SUM = await OrdersModel.sum('price', {
    where: {
      created: { 
        [Op.gt]: TODAY_START,
        [Op.lt]: NOW
      },
    },
 });
 console.log(SUM);

Вам необходимо создать запрос, подобный следующему: created < [NOW] AND created > [TODAY_START] Почему? , потому что вы получите сумму всех цен, зарегистрированных после NOW. Этот код также поможет вам получить общее количество дат.

Альтернатива для PostgreSQL

Обратите внимание, что PostgreSQL позволяет вам усекать до определенных интервалов. Таким образом, вы можете вызвать метод sequelize.fn(), чтобы создать запрос, который вызывает 'date_trunc', вы можете узнать больше по этой ссылке . Как это:

const SUM = await OrdersModel.sum('price', {
    where: {
      sequelize.fn('CURRENT_DATE'): {
        [Op.eq]:  sequelize.fn('date_trunc', 'day', sequelize.col('created'))
      }
    },
});
console.log(SUM);

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

npm i sequelize@5.8.6 --s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...