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

如何从SQLite数据库中仅检索当前日期的数据?

解决SQLite中仅检索当前日期数据的问题

没问题,我来帮你搞定这个需求!你的表结构里已经用TIMESTAMP DEFAULT CURRENT_TIMESTAMP存储了日期时间,要筛选当天的数据其实很简单,利用SQLite的内置日期函数就能轻松实现。

方法一:使用SQLite内置日期函数(推荐)

SQLite的DATE()函数可以提取日期时间字符串的日期部分,DATE('now')会返回当前的UTC日期。你只需要修改查询方法,添加筛选条件即可:

private Cursor getTodayData() {
    // 筛选条件:TIMESTAMP的日期部分等于当前日期
    String selection = "DATE(" + Db_Contract.Db_Fieds.TIMESTAMP + ") = DATE('now')";
    return db.query(Db_Contract.Db_Fieds.TABLE_NAME, 
                    null, 
                    selection, 
                    null, 
                    null, 
                    null, 
                    Db_Contract.Db_Fieds.TIMESTAMP);
}

注意时区问题

如果你的应用需要基于本地时间筛选(而不是UTC),可以把DATE('now')换成DATE(datetime('now','localtime')),这样会获取当前时区的日期:

String selection = "DATE(" + Db_Contract.Db_Fieds.TIMESTAMP + ") = DATE(datetime('now','localtime'))";

方法二:用Java代码生成当前日期参数(参数化查询)

如果你习惯用Java处理日期,也可以生成当前日期的字符串,通过参数化查询传入,这样更安全(避免SQL注入风险,虽然这里没有用户输入,但养成好习惯):

import java.text.SimpleDateFormat;
import java.util.Date;

private Cursor getTodayData() {
    String selection = "DATE(" + Db_Contract.Db_Fieds.TIMESTAMP + ") = ?";
    // 生成yyyy-MM-dd格式的当前日期字符串
    String currentDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
    String[] selectionArgs = { currentDate };
    
    return db.query(Db_Contract.Db_Fieds.TABLE_NAME, 
                    null, 
                    selection, 
                    selectionArgs, 
                    null, 
                    null, 
                    Db_Contract.Db_Fieds.TIMESTAMP);
}

原理说明

因为你的TIMESTAMP字段存储的是SQLite默认的ISO8601格式字符串(比如'2024-05-20 14:30:00'),DATE()函数会自动提取出'2024-05-20'这样的日期部分,和当前日期做相等匹配,就能精准筛选出当天的所有数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:23:30