将mySQL查询转换为KNEX

问题描述 投票:0回答:1

我正在将一系列查询转换为Knex语法。我对此查询有疑问:

SELECT id,reviewed,log_reference,CONVERT(notification USING utf8),create_time,update_time,store,user_id
FROM store_failure_log
WHERE reviewed = 0
AND create_time BETWEEN NOW() - INTERVAL 18 HOUR AND NOW();

更确切地说是这行:

SELECT id,reviewed,log_reference,CONVERT(notification USING utf8),create_time,update_time,store,user_id

我有此Knex:

knex('store_failure_log')
        .select('id', 'reviewed', 'log_reference', 'CONVERT(notification USING utf8)', 'create_time', 'update_time', 'store', 'user_id').convert('notification USING utf8')
        .where('reviewed', 0)
        .where(knex.raw('create_time BETWEEN NOW() - INTERVAL 18 HOUR AND NOW()'))

产生此SQL查询:

select `id`, `reviewed`, `log_reference`, `CONVERT(notification USING utf8)`, `create_time`, `update_time`, `store`, `user_id` from `store_failure_log` where `reviewed` = 0 and create_time BETWEEN NOW() - INTERVAL 18 HOUR AND NOW()

问题出在:Convert(使用utf8的通知)。

查询无效,因为转换位于括号内。如何使用knex编写它?

通常,我如何在KNEX语法中包括SQL函数调用?

mysql node.js knex.js
1个回答
0
投票

您可以使用raw在您的Knex查询中包括SQL函数调用,就像您已经在where中完成的操作一样:

knex('store_failure_log')
        .select(knex.raw('id', 'reviewed', 'log_reference', 'CONVERT(notification USING utf8)', 'create_time', 'update_time', 'store', 'user_id'))
        .where('reviewed', 0)
        .where(knex.raw('create_time BETWEEN NOW() - INTERVAL 18 HOUR AND NOW()'))
© www.soinside.com 2019 - 2024. All rights reserved.