使用Knex.js对象语法执行select查询时,如何强制指定别名的大小写?
Knex.js对象语法执行select查询时,如何强制指定别名的大小写?
嘿,我之前用Knex搭配OracleDB的时候也碰到过这个糟心的问题——Oracle总把字段别名自动转成大写,手动给每个别名加双引号实在太繁琐了,给你分享两个实用的解决办法:
1. 全局配置自动包裹标识符(最推荐)
你可以在初始化Knex的时候,通过wrapIdentifier选项全局设置标识符的处理规则,让Knex自动给别名加上双引号,这样Oracle就会保留你指定的camelCase大小写了。
示例代码如下:
const knex = require('knex')({ client: 'oracledb', connection: { user: '你的数据库用户名', password: '你的数据库密码', connectString: '你的数据库连接串' }, wrapIdentifier: (value, origImpl) => { // 让Knex自动把所有标识符用双引号包裹 return origImpl(`"${value}"`); } });
配置完成后,你再写原来的查询:
knex.select({ currentDate: "SYSDATE" }).from("dual")
Knex会自动把currentDate转换成带双引号的形式发送给Oracle,返回的结果里字段名就会是currentDate而不是大写的CURRENTDATE了,多个字段的时候也不用逐个处理,省心很多。
2. 自定义工具函数(局部使用)
如果你不想全局生效,只是针对部分查询处理别名,可以写一个简单的工具函数来快速生成带双引号的别名:
// 生成带双引号的camelCase别名 function camelAlias(aliasName) { return `"${aliasName}"`; } // 使用示例 knex.select({ [camelAlias('currentDate')]: "SYSDATE", [camelAlias('userName')]: "USER_NAME" }) .from("your_table");
这个方法虽然还是要手动调用函数,但比直接写一堆双引号要整洁不少。
另外要注意,Oracle对带双引号的标识符是大小写敏感的,但只要通过Knex的配置或工具函数统一处理,后续的查询操作Knex都会自动适配,不用额外担心引用问题。
备注:内容来源于stack exchange,提问作者Austin
相关产品推荐
相关产品推荐

