我正在汇总一个十进制列,它以字符串而不是整数形式返回?
exports.sumMoney = function (id) {
return myModel.findAll({
raw: true,
attributes: [[sequelize.fn('SUM', sequelize.col('moneycol')), 'moneylabel']],
where: { id: id }
}).then(r => r);
}
答案 0 :(得分:1)
我不确定您是使用MySQL还是Postgres,但是将其添加到配置中可以解决我在MySQL上的问题
dialectOptions: {
decimalNumbers: true
}
答案 1 :(得分:0)
为了将结果转换为数字,您需要使用sequelize.cast函数执行显式转换:
exports.sumMoney = function (id) {
return myModel.findAll({
raw: true,
attributes: [[sequelize.cast(sequelize.fn('SUM', sequelize.col('moneycol')), 'int'), 'moneylabel']],
where: { id: id }
}).then(r => r);
}
我不知道为什么在续集v4文档中未作说明,但v3指出:
在postgres上需要显式强制转换。
http://sequelize.readthedocs.io/en/v3/api/sequelize/#fnfn-args-sequelizefn
答案 2 :(得分:0)
几天前,我确实解决了该问题。
只有您需要使用SIGNED
而不是int
。
[Transacciones.sequelize.cast(Transacciones.sequelize.fn('SUM', Transacciones.sequelize.col('fare')), 'SIGNED'), 'fare'],
答案 3 :(得分:0)
我找到了两种解决方法
通过在模型中传递get()方法
discountPercentage: {
type: DataTypes.DECIMAL(18, 3),
allowNull: true,
defaultValue: 0.000,
get() {
return parseFloat(this.getDataValue('discountPercentage')) || null;
}
},
通过设置 dialectOptions 与 ow3n 的答案相同(我已尝试使用 MySQL)
new Sequelize('mysql://root@localhost:3306/database',{
dialectOptions:
{
decimalNumbers: true
}
})