当我使用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 activitat
。codiAct
activitat
。procedencia
,activitat
。pacient
,activitat
。 proces
,activitat
。prova
,activitat
。rmn
,activitat
。realitzador
,date_format(data
, '%d-%m-%Y')AS data
,tecnic
。codiTec
AS tecnic.codiTec
,tecnic
。{{1 } nom
FROM tecnic.nom
AS activitat
LEFT OUTER JOIN activitat
AS tecnics
ON tecnic
。activitat
= {{1 } {。realitzador
WHERE tecnic
。codiTec
=' 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字段)
非常感谢!!
答案 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)时,它仅考虑日期部分(不是时间部分)