我正在使用Sequelize进行一项我正在进行的快速项目 在一个查询中,我想检索两列的连接结果。
像:
SELECT first_name || ' ' || last_name AS full_name FROM table
我尝试了以下语法并收到错误
router.get('/persons', function(req, res, next) {
models.Person.findAll({
attributes: [models.sequelize.fn('CONCAT', 'first_name', 'last_name')]
})
.then(function(persons) {
res.send(persons);
});
});
错误消息:
SELECT CONCAT('first_name', 'last_name') FROM `Persons` AS `Person`;
Possibly unhandled SequelizeDatabaseError: Error: SQLITE_ERROR: no such function: CONCAT
答案 0 :(得分:2)
我使用了models.sequelize.literal
,它创建了一个表示文字的对象,
在嵌套数组中给它一个别名。
router.get('/persons', function(req, res, next) {
models.Person.findAll({
attributes: [models.sequelize.literal("first_name || ' ' || last_name"), 'full_name']
})
.then(function(persons) {
res.send(persons);
});
});
答案 1 :(得分:1)
重构到ES6并等待异步
const {fn, col } = models.sequelize
const { Person } = models
router.get('/persons', async(req, res, next) => {
try {
const persons = await Person.findAll({
attributes: [fn('CONCAT', col('first_name'), ' ', col('last_name'))]
})
res.send(persons);
} catch (err) {
next(err)
}
});
答案 2 :(得分:0)
希望这会有所帮助。
router.get('/persons', function(req, res, next) {
models.Person.findAll({
attributes: [models.sequelize.fn('CONCAT', models.sequelize('first_name'), ' ', models.sequelize('last_name'))]
})
.then(function(persons) {
res.send(persons);
});
});
答案 3 :(得分:0)
我遇到了同样的问题,我是这样解决的
const { fn, col } = Person.sequelize;
const res = Person.findAll({
attributes: [ [fn('concat', col('first_name'), ' ', col('last_name')), "FullName"], ...OthersColumns ]
})
希望能帮到你或其他人