Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何获取今天的sequelize js记录_Mysql_Node.js_Express_Sequelize.js - Fatal编程技术网

Mysql 如何获取今天的sequelize js记录

Mysql 如何获取今天的sequelize js记录,mysql,node.js,express,sequelize.js,Mysql,Node.js,Express,Sequelize.js,我有一张与下表相似的桌子。我想找出今天所有价格的总和 | 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

我有一张与下表相似的桌子。我想找出今天所有价格的总和

| 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);
即使今天有条目,SUM的值也为0。我也尝试了以下方法,但也不起作用

const TODAY = new Date();
const SUM = await OrdersModel.sum('price', {
    where: {
      created: Sequelize.DATE(TODAY),
    },
});
console.log(SUM);
在终端上查询的SQL语句如下

正在执行(默认):选择sum(`price`)作为`sum`,从`orders`中选择`orders`,其中`orders`.`created`='2019-05-27 18:30:00'


这里发生的事情是,您正在比较精确的时间戳,如
'2019-05-27 11:40:48'
等于
'2019-05-27 18:30:00'
。所以这个比较永远不会给你一个结果,因为即使是同一天(5月27日),但时间是不同的

所以这里有一个可能的解决方案

const Op=Sequelize.Op;
const TODAY_START=new Date().setHours(0,0,0,0);
const NOW=新日期();
const SUM=等待订单模型SUM('价格'{
其中:{
创建:{
[Op.gt]:从今天开始,
现在
},
},
});
控制台日志(总和);
您需要创建如下查询:
created<[NOW]和created>[TODAY\u START]
为什么?因为您将获得
NOW
之后注册的所有价格的总和。此代码还将帮助您获取一系列日期的总数

PostgreSQL的替代方案 请注意,PostgreSQL允许您截断到特定的时间间隔。因此,您可以调用
sequelize.fn()
方法来创建一个可以调用“date\u trunc”的查询。像这样:

const SUM=wait OrdersModel.SUM('price'){
其中:{
sequelize.fn(“当前日期”):{
[Op.eq]:sequelize.fn('date\u trunc','day',sequelize.col('created'))
}
},
});
控制台日志(总和);
还请记住更新到:

npm-isequelize@5.8.6--s

这里发生的事情是,您正在比较精确的时间戳,如
'2019-05-27 11:40:48'
等于
'2019-05-27 18:30:00'
。所以这个比较永远不会给你一个结果,因为即使是同一天(5月27日),但时间是不同的

所以这里有一个可能的解决方案

const Op=Sequelize.Op;
const TODAY_START=new Date().setHours(0,0,0,0);
const NOW=新日期();
const SUM=等待订单模型SUM('价格'{
其中:{
创建:{
[Op.gt]:从今天开始,
现在
},
},
});
控制台日志(总和);
您需要创建如下查询:
created<[NOW]和created>[TODAY\u START]
为什么?因为您将获得
NOW
之后注册的所有价格的总和。此代码还将帮助您获取一系列日期的总数

PostgreSQL的替代方案 请注意,PostgreSQL允许您截断到特定的时间间隔。因此,您可以调用
sequelize.fn()
方法来创建一个可以调用“date\u trunc”的查询。像这样:

const SUM=wait OrdersModel.SUM('price'){
其中:{
sequelize.fn(“当前日期”):{
[Op.eq]:sequelize.fn('date\u trunc','day',sequelize.col('created'))
}
},
});
控制台日志(总和);
还请记住更新到:

npm-isequelize@5.8.6--s

添加日期函数,在不考虑时间的情况下进行日期比较

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

添加DATE函数进行日期比较,不考虑时间

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

利用时间会更容易

const moment = require('moment');
const Op = require('sequelize').Op;
const SUM = await OrdersModel.sum('price', {
    where : {
                created_at : { [Op.gt] : moment().format('YYYY-MM-DD 00:00')},
                created_at : { [Op.lte] : moment().format('YYYY-MM-DD 23:59')}
            },
});
console.log(SUM);

利用时间会更容易

const moment = require('moment');
const Op = require('sequelize').Op;
const SUM = await OrdersModel.sum('price', {
    where : {
                created_at : { [Op.gt] : moment().format('YYYY-MM-DD 00:00')},
                created_at : { [Op.lte] : moment().format('YYYY-MM-DD 23:59')}
            },
});
console.log(SUM);

您还可以使用
Sequelize.literal

    const { Op } = Sequelize;
    const options = {
        where: {}
    };

    options[Op.and] = [
        sequelize.where(Sequelize.literal('DATE(created) = CURDATE()'))            
    ] 

    const SUM = await OrdersModel.sum('price', options);
    console.log(SUM);
如果没有未来日期,您可以像下面这样查询

    options[Op.and] = [
        sequelize.where(sequelize.col('created'), {
            [Op.gt]: Sequelize.literal('DATE_SUB(CURDATE(), INTERVAL 1 DAY)')
        })            
    ]
    const SUM = await OrdersModel.sum('price', options);
    console.log(SUM);

您还可以使用
Sequelize.literal

    const { Op } = Sequelize;
    const options = {
        where: {}
    };

    options[Op.and] = [
        sequelize.where(Sequelize.literal('DATE(created) = CURDATE()'))            
    ] 

    const SUM = await OrdersModel.sum('price', options);
    console.log(SUM);
如果没有未来日期,您可以像下面这样查询

    options[Op.and] = [
        sequelize.where(sequelize.col('created'), {
            [Op.gt]: Sequelize.literal('DATE_SUB(CURDATE(), INTERVAL 1 DAY)')
        })            
    ]
    const SUM = await OrdersModel.sum('price', options);
    console.log(SUM);

我们还可以使用[op.between],它将获取两个给定日期范围之间的数据。因此,如果我们给出今天的开始时间和当前时间,它将给出今天的数据

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

where: {
createdAt: {
    [Op.between]: [START.toISOString(), NOW.toISOString()]
  }
}

快乐编码…

我们也可以使用[op.between],它将获取两个给定日期范围之间的数据。因此,如果我们给出今天的开始时间和当前时间,它将给出今天的数据

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

where: {
createdAt: {
    [Op.between]: [START.toISOString(), NOW.toISOString()]
  }
}


快乐编码…

您好,添加日期函数是什么意思?使用日期函数,您将与日期值进行比较,它将忽略hh:mm:ss值是我应该编写的自定义函数还是sequelize的一部分?参考注释部分中的更新代码,它是一个内置函数sequelize.fn('DATE\u trunc','day',sequelize.col(“YouDATeField'”)所以它只考虑日期部分,你不能使用一个函数,一个对象键,这会导致一个错误。SytRealError:意外标记。{您好,添加日期函数是什么意思?使用日期函数,您将与日期值进行比较,它将忽略hh:mm:ss值它是我应该编写的自定义函数还是sequelize的一部分?参考注释部分中的更新代码,它是一个内置函数sequelize.fn('DATE_trunc','day',sequelize.col YourDateField'))因此,它只考虑日期部分,不能使用一个函数,一个对象键,这会导致一个错误。{嗨,我仍然得到0的总和,并且终端上执行的SQL查询没有任何更改。嗨,尝试使用小于来查看您得到的结果可能是另一个partOp中的错误。lt给出了一个值。它如何正确地给出以前所有日期的总和。然后尝试这个替代方法,我想我知道发生了什么。您是否正在比较精确的timestamps??如
'2019-05-27 11:40:48'
等于
'2019-05-27 18:30:00'
此比较不会给出结果,因为是同一天(5月27日)但是时间不同。是的,所以我尝试使用Op.gt和Today date,并将时间更改为午夜。这很有效。您好,我仍然将总和设置为0,并且在终端上执行的SQL查询中没有任何更改。嘿,尝试使用小于来查看您得到了什么