如何在Knex中不使用raw SQL查询字段并将返回结果转为大写
问题原因
你直接将UPPER(tb_usuario.nome)作为字符串传入select方法时,Knex会将整个字符串识别为普通字段名,自动添加转义符号,最终数据库会将该整体字符串当做列名查找,因此触发列名不存在的错误。
解决方法
你不想使用raw SQL功能的话,可以直接使用Knex内置的fn接口调用标准SQL函数,完全不需要拼接原生SQL:
const usersJornadasComites = await Database.table('tb_usuario_jornada') .where('tb_usuario_jornada.jornada_id', lastJornad.id) .where('tb_usuario_jornada.comite_id', params.id) .where('tb_usuario_jornada.ativo', 1) .select( 'tb_usuario.id', // 调用内置UPPER函数,设置别名方便后续取值 Database.fn.upper('tb_usuario.nome').as('nome'), 'tb_usuario.email', 'tb_usuario.celular', 'tb_usuario.dt_nascimento', 'tb_usuario_jornada.criado_em', 'tb_usuario.id', 'tb_usuario_jornada.usuario_id' ) .leftJoin( 'tb_usuario', 'tb_usuario_jornada.usuario_id', 'tb_usuario.id' )
Database.fn是Knex封装的标准SQL函数调用工具,支持UPPER、LOWER、SUM、COUNT等所有通用SQL函数,生成SQL时会自动识别为函数调用,不会被当做字段名转义,完全符合你不使用raw SQL的要求。搭配.as('nome')设置字段别名后,返回结果可以直接通过nome字段取到大写后的姓名。
内容的提问来源于stack exchange,提问作者user3299563
相关产品推荐
相关产品推荐

