【问题标题】:sequelize where date clause续集 where 日期子句
【发布时间】:2017-02-17 00:27:26
【问题描述】:
  • 操作系统:Linux (Lubuntu)
  • 语言:Javascript(Node js)
  • 框架:快递js
  • 数据库:mysql
  • “data”是“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> select data from activitat where data = '2016-10-20';
+------------+
|数据 |
+------------+
| 2016-10-20 |
| 2016-10-20 |
| 2016-10-20 |
| 2016-10-20 |
+------------+

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

执行(默认):SELECT activitat.codiActactivitat.procedencia, activitat.pacient, activitat.proces, activitat.@9876543333 @.rmn, activitat.realitzador, date_format(data, '%d-%m-%Y') AS data, tecnic.codiTec AS tecnic.codiTec, @987654341 @。tecnic.nom activitat activitat 987654345 tecnics tecnic activitat 987654349 @ = tecnic 987654351 activitat 987654352 activitat 987654352 activitat 987654352 @ = '2016-10-19 22:00:00'
按注册 DESC 订购;

我的问题是:
我写了“2016-10-20”作为where子句。当我在 mysql 中执行此操作时,它会显示我希望的结果,但是当执行 sequelize 时,它​​会将 data 子句的值更改为“2016-10-19 22:00:00”(“2016-10-20 00 之前的两个小时: 00:00”!!)。为什么?

我记得“数据”字段是日期字段(不是日期时间字段)

非常感谢!!

【问题讨论】:

    标签: javascript mysql express


    【解决方案1】:

    当您在 Sequelize 中定义表的字段时,我发现了一种新的字段类型。这是 DATAONLY 类型(而不是 DATA 类型)。所以,字段定义如下:

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

    对于这种文件类型(DATAONLY),它只考虑日期部分(不是时间部分)

    【讨论】:

      【解决方案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){
                      ...
                  });
      

      【讨论】:

        猜你喜欢
        • 2018-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-15
        • 1970-01-01
        • 2022-01-20
        • 2018-10-06
        • 2010-12-29
        相关资源
        最近更新 更多