sequelize where date clause

时间:2016-10-07 22:55:52

标签: javascript mysql express

  • OS:Linux(Lubuntu)
  • 语言:Javascript(Node js)
  • 框架:表达js
  • 数据库:mysql
  • "数据"是来自" activitat"的日期字段。表

当我使用Sequelize.js

运行下一个语句时
models.TblActivitat.findAll(
                {
                    attributes: 
                    [
                        'codiAct', 'procedencia', 'pacient', 'proces', 'prova', 'rmn', 'realitzador',
                        [Sequelize.fn('date_format', Sequelize.col('data'), '%d-%m-%Y'), 'data']
                    ],
                    include: models.TblTecnics,
                    where: {"data": '2016-10-20' },   //dataAAAAMMDD
                    order: "registre DESC"
                }).then(function(tblActTec){
                    ...
                });

......我必须得到一些记录,但我什么都没得到

在mysql上运行我得到了结果:
    MySQL的>从activitat中选择数据,其中data = ' 2016-10-20' ;
    + ------------ +
    |数据|
    + ------------ +
    | 2016-10-20 |
    | 2016-10-20 |
    | 2016-10-20 |
    | 2016-10-20 |
    + ------------ +

如果我看到节点服务器的控制台。当执行之前的satement时,它显示如下:

执行(默认):SELECT activitatcodiAct activitatprocedenciaactivitatpacientactivitatprocesactivitatprovaactivitatrmnactivitatrealitzador,date_format(data, '%d-%m-%Y')AS datatecniccodiTec AS tecnic.codiTectecnic。{{1 } nom FROM tecnic.nom AS activitat LEFT OUTER JOIN activitat AS tecnics ON tecnicactivitat = {{1 } {。realitzador WHERE tecniccodiTec =' 2016-10-19 22:00:00 & #39;
ORDER BY注册DESC;

我的问题是:
我写了#34; 2016-10-20"作为where子句。当我在mysql中执行它时,它会显示我希望的结果,但是当执行sequelize时,它会更改数据子句的值by" 2016-10-19 22:00:00" (前两个小时" 2016-10-20 00:00:00" !!)。为什么?

我记得那个"数据" field是Date字段(不是DateTime字段)

非常感谢!!

2 个答案:

答案 0 :(得分:2)

Sequelize将您传入的字符串转换为Date对象,该对象具有分配给它的时间。如果您想在特定日期(而不是在确切时间)选择记录,您可以这样做:

 date: {
     $lt: new Date('2016-10-20'),
     $gt: new Date(new Date('2016-10-20') - 24 * 60 * 60 * 1000)
 }

或者在你的情况下:

models.TblActivitat.findAll(
            {
                attributes: 
                [
                    'codiAct', 'procedencia', 'pacient', 'proces', 'prova', 'rmn', 'realitzador',
                    [Sequelize.fn('date_format', Sequelize.col('data'), '%d-%m-%Y'), 'data']
                ],
                include: models.TblTecnics,
                where: {"data": {
                    $lt: new Date('2016-10-20'),
                    $gt: new Date(new Date('2016-10-20') - 24 * 60 * 60 * 1000)
                } },   //dataAAAAMMDD
                order: "registre DESC"
            }).then(function(tblActTec){
                ...
            });

答案 1 :(得分:1)

在Sequelize中定义表的字段时,我发现了一个新的字段类型。这是DATAONLY类型(而不是DATA类型)。因此,字段定义如下:

        data:
        {
            type:   DataTypes.DATEONLY,
            validate:
            {
                notEmpty: 
                {
                    msg: "-> Falta data"
                }
            }
        },

使用此文件类型(DATAONLY)时,它仅考虑日期部分(不是时间部分)