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

如何修正SQL查询以提取日期列中的今日待办数据?

修正今日待办数据的SQL查询语句

直接给你能正常生效的查询语句,同时说明问题根源:

@Query("SELECT * FROM todo_table WHERE date(`date`) = date('now', 'localtime')")
List<ToDoTask> getTodayTasks();

原语句失效的原因

  1. 字段名与SQLite内置函数冲突:你表中的字段名叫date,和SQLite自带的date()函数重名,直接写date(date)会让数据库混淆,无法正确识别你要引用的是表字段。用反引号\``把字段名date`包裹起来,就能明确指定这是表中的字段,而非函数。
  2. 时区不匹配:默认date('now')返回的是UTC时区的日期,如果你待办数据里存的是本地时区的日期(比如手机当前时区的日期),自然匹配不上。加上'localtime'参数后,date('now', 'localtime')会返回当前本地时区的今日日期,和数据中的日期对齐。

额外验证建议

  • 检查ToDoTask实体类里的date字段:如果是String类型,确保存储格式是yyyy-MM-dd(和SQLitedate()函数的解析格式一致);如果是Date类型,Room会自动处理转换,但仍要保证查询时区和存储时区一致。
  • 可以临时打印date('now', 'localtime')的返回值,和数据库里存储的日期格式做对比,确认两者完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:55:40