如何在 Knex 查询中执行 MySQL 函数?

Posted

技术标签:

【中文标题】如何在 Knex 查询中执行 MySQL 函数?【英文标题】:How to execute a MySQL function in a Knex query? 【发布时间】:2017-11-24 13:53:42 【问题描述】:

我的表中有一个BINARY 字段,我通常这样抓取:

SELECT HEX(users.id) AS id FROM users WHERE username = ?

我最近开始使用 Knex,因为我需要能够从对象动态生成 WHERE 子句。这是我尝试过的:

knex('users').select('HEX(users.id) AS id)').where(filter);

这是它生成的查询:

select `HEX(users`.`id)` as `id` ....

然后我尝试了这个:

knex('users').select('HEX(`users`.`id`) AS id').where(filter);

它提出了这个:

select `HEX(``users```.```id``)` as `id` ....

如何执行HEX() 而不被误认为是列名?

【问题讨论】:

【参考方案1】:

使用 knex 来引用标识符,它看起来像这样:

knex('users').select(knex.raw('HEX(??) AS id', ['users.id'])).where(filter);

【讨论】:

【参考方案2】:

我找到了解决方案。我必须使用raw() 函数。所以我的查询生成器将如下所示:

knex('users').select(knex.raw('HEX(`users`.`id`) AS id')).where(filter);

【讨论】:

我讨厌使用 raw。查询生成器有什么用?

以上是关于如何在 Knex 查询中执行 MySQL 函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 knex 查询存储在变量中?

带有 Express 的 Knex.js,如何在 knex.commit 后跟 knex.select 查询?

如何在 Knex 中像查询一样逃避 %?

Knex:如何在 knex 中的有子句中编写 ARRAY_AGG?

如何在 Knex 上使用 EXISTS 进行子查询?

如何在 RDS 上正确使用 Knex / Bookshelf 和 MySQL