【问题标题】:Sequelize/tedious parsing datetime wrong to where clauseSequelize/繁琐的解析日期时间错误到 where 子句
【发布时间】:2018-02-06 09:44:41
【问题描述】:

我在 sql 查询中没有得到任何结果,因为 where 子句中的过滤器在执行查询之前被 sequelize/tedious 更改了。

const query = `SELECT field FROM Table WITH(NOLOCK) WHERE CreationDate BETWEEN '${startDate}' AND '${endDate}'`

return sequelize.rawQuery(query)
.then((resultado) => {
    return resultado;
})
.catch((error) => {
    console.log('error')
});

这是sequelize/tedious生成的查询

SELECT [Field] 
 FROM [Table] AS [Table] WHERE 
([Table].[CreationDate] > N'2018-02-01 16:36:00.000 -02:00' AND [Table].[CreationDate] < N'2018-02-01 16:46:00.000 -02:00')

你能帮我解决这个问题吗? CreationDate 存储为 YYYY-MM-DD HH:MM:SS

【问题讨论】:

  • startDate 和 endDate 的值是多少?它们是字符串还是日期对象?
  • Michael,值是字符串,例如“2018-02-02 14:45:00”。

标签: node.js sequelize.js tedious


【解决方案1】:

上周我也一直在努力解决这个问题。 它应该已经解决了here,并且已经讨论了herehere。但我不认为它真的已经解决了。

我知道这不是正确的方法,但您可以从这里更改架构:

CreationDate: {
  type: DataTypes.DATE,
  allowNull: true
},

CreationDate: {
  type: DataTypes.INTEGER,
  allowNull: true
},

然后将您的 startDate 和 endDate 转换为整数,例如:

 Date.parse(startDate) / (1000 * 60 * 60 * 24)

我真的希望有人能提供帮助,因为繁琐的文档有点难以理解。 这暂时解决了我的问题,直到我解决它。只有 mssql 出现过这个问题。

【讨论】:

  • 我无法更改数据库的数据类型。 CreationDate 是一个 datetime2 字段。
猜你喜欢
  • 1970-01-01
  • 2018-10-06
  • 1970-01-01
  • 2010-12-29
  • 2018-05-27
  • 1970-01-01
  • 2018-01-08
  • 2015-06-30
相关资源
最近更新 更多