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

如何使用Knex从MySQL的datetime列按日期筛选数据?

Knex筛选Datetime列指定日期数据的正确写法

错误原因分析

  1. 直接写date(created_at)报错是因为你调用了未定义的date函数(JavaScript中日期构造函数是大写的Date,且这里需要调用MySQL的DATE()函数而非JS方法)。
  2. 直接用.where('created_at', '=', '2022-08-15')不生效,是因为created_at是datetime类型,值包含时分秒(如2022-08-15 14:30:00),与纯日期字符串无法完全匹配。

正确写法

方法1:使用whereRaw直接编写SQL片段

这是最贴近原生SQL的写法,适合熟悉MySQL语法的场景:

function getData(req, res) {
    app.db('table')
        .select('*')
        .whereRaw('date(`created_at`) = ?', ['2022-08-15'])
        .then(data => res.json(data))
        .catch(err => res.status(500).json({ error: err.message }));
}

方法2:使用Knex的fn.date调用SQL函数

利用Knex提供的fn对象调用MySQL内置函数,保持Knex链式调用风格:

function getData(req, res) {
    app.db('table')
        .select('*')
        .where(app.db.fn.date('created_at'), '=', '2022-08-15')
        .then(data => res.json(data))
        .catch(err => res.status(500).json({ error: err.message }));
}

补充说明

  • 如果你的table是预定义的表对象(如通过knex.schema.table创建的),可以把select('*')换成select(table.*)。
  • 务必添加错误捕获逻辑,避免请求因数据库异常而挂起。

内容的提问来源于stack exchange,提问作者carolcal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:57:45