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

TypeORM(SQLite):QueryBuilder中datetime字段匹配日期忽略时间

解决TypeORM搭配SQLite时按日期(而非Datetime)匹配查询的问题

针对你的需求,这里有几种直接按日期匹配的方案:

方案1:使用SQLite的DATE()函数提取日期部分

直接利用SQLite内置的DATE()函数,将存储的datetime字段转换成纯日期格式(YYYY-MM-DD),再和传入的日期字符串比较,不需要转换为Date对象:

.andWhere("DATE(logs.log_date) = :log_date", { log_date: "2024-12-11" })

原理:DATE(logs.log_date)会自动把2024-12-11 00:00:00.000这类datetime值转换成2024-12-11,直接与你传入的日期字符串精确匹配。

方案2:查询当天时间范围

如果需要利用字段索引提升查询效率(函数可能导致索引失效),可以查询目标日期0点到次日0点的范围:

const targetDate = new Date("2024-12-11");
const nextDay = new Date(targetDate);
nextDay.setDate(nextDay.getDate() + 1);

.andWhere("logs.log_date >= :startDate AND logs.log_date < :endDate", {
  startDate: targetDate,
  endDate: nextDay
})

这种方式会匹配所有2024-12-11当天的datetime记录,同时能利用log_date字段的索引(如果已创建)。

方案3:使用TypeORM函数表达式(链式调用风格)

如果你更倾向于TypeORM的链式API而非直接写SQL字符串,可以用function方法构建查询:

.andWhere(qb => qb
  .function("DATE", "string", "logs.log_date")
  .equals(":log_date"), { log_date: "2024-12-11" })

这种写法和方案1逻辑一致,但更贴合TypeORM的代码风格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:53:19