当我在下面使用日期格式 YYYY-MM-DD HH:MM:SS
运行 sequelize 查询时
var query = "select * from alert_detail_full as a\
where a.client_id = '" + clientId + "'\
AND a.timestamp between '" + startDate + "' AND '" + endDate + "';";
db.sequelize.query(query).spread(function (sresult, met) {
console.log(sresult)
var alerts = [];
if (sresult != false) {
sresult.forEach(function (e) {
alerts.push(e);
});
}
response = {
alerts: alerts
};
next(response);
});
我的 sequelize 运行这个查询:
SELECT * FROM alert_detail_full as a
WHERE a.client_id = 'CL001'
AND a.timestamp BETWEEN '2018-06-08 00:02:00' AND '2018-06-08 00:06:00';
如果我将这个查询直接放在 mysql 中,它会给我一个结果列表。
但是在 sequelize sresult
返回 []
,但是如果我在几天而不是几分钟内创建差异,它将返回如下结果列表。
{
"client_id": "CL001",
"collector_id": "C01",
"sensor_id": "S001",
"value": "4341435.452947",
"timestamp": "2018-06-08T08:01:00.000Z",
"alert_yellow": "60230000.000000",
"alert_red": "456000.000000",
"alert_flag": "low"
},
更新
如果我在时间之间设置很大的间隔,例如 T00:02:00 - T20:02;00
,它也会在 sequelize 中生成结果,但如果间隔很小,我只能得到MYSQL 和 sequelize 中的结果总是返回 []
最佳答案
Sequelize 在插入和读取时默认将日期转换为UTC
。你可以告诉 sequelize 不要这样做
const sequelize = new Sequelize('db_name', 'postgres', 'postgres', {
host: '127.0.0.1',
dialectOptions: {
useUTC: false //for reading from database
},
dialect: 'postgres',
timezone: '+05:30', // for writng
});
也看看类似的问题here
关于mysql - 为什么在 hh/mm/ss 不同的日期之间 Sequelize 返回空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50959295/