【问题标题】:How to query a date field for a specific month with Postges and Knex.js如何使用 Postges 和 Knex.js 查询特定月份的日期字段
【发布时间】:2019-01-14 21:14:44
【问题描述】:

我正在使用 Knex.js 和 Postgres 设置新的日期查询。我需要从表中返回特定月份的所有行。

这是一个简单的应用 API。我设法从表中返回了我想要的所有字段,但不知道如何查询特定月份的日期字段。我使用 Knex.js 作为我的查询生成器,并具有以下内容:

db('table').select() 
.where('Month(date)', '=', 0  ); //this field where I am lost, 

我认为可以完成这项工作的 sql 是:EXTRACT(MONTH FROM dateColumn::date) = 1

我现在收到一个错误。但我希望查询返回一月份的所有日期字段。我知道我可以使用 .whereRaw() 字段,但我不能 100% 确定如何使用它,因为文档没有提供日期字段的任何用例。

作为参考,我要查询的列date的格式为date

【问题讨论】:

  • 如果您可以添加一个示例,您希望生成什么样的 SQL 查询,那么为它提供一个精确的 knex 等价物会更容易。
  • 谢谢,我已经更新了问题。

标签: node.js postgresql knex.js objection.js


【解决方案1】:

我设法通过使用 knex 的 .whereRaw() API 使其工作。

.andWhereRaw(`EXTRACT(MONTH FROM dateColumn::date) = ?`, [monthVariable])

我不完全确定为什么,但它只适用于我的dateColumn::date 后缀。这会将我的 dateColumn 转换为 postgres dateType。令人困惑的部分是dateColumn 已经是date 类型。

【讨论】:

    【解决方案2】:

    也许是这样的:

    db('table').where(db.raw('EXTRACT(MONTH FROM ??::date)', ['dateColumn']), 0)
    

    【讨论】:

    • 对此没有任何运气。我收到消息“不推荐使用全局 knex.raw”。
    • 对.. 你已经创建了名为 db 的 knex 实例。修正了答案。
    • 还更新了答案以匹配问题中更新的查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多