如何从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
相关产品推荐
相关产品推荐

