You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:00:04