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

Android应用中SQLite使用strftime过滤记录失败,求排查解决

问题排查与解决方案

你的SELECT语句无法生效的核心原因是逻辑匹配方向错误:数据库中date字段存储的是带时分秒、时区的完整ISO8601字符串(如2023-01-29T15:56:00.733533+01:00),而你是将目标日期2023-01-29格式化后直接与原字段值比较,两者格式完全不同,自然无法匹配。

正确的过滤写法

1. 基于UTC日期过滤

直接对数据库的date字段使用strftime(或简化的DATE()函数)格式化,再与目标日期匹配:

-- 使用strftime
SELECT * FROM history WHERE strftime('%Y-%m-%d', date) = '2023-01-29';

-- 简化写法,效果等价
SELECT * FROM history WHERE DATE(date) = '2023-01-29';

SQLite会自动解析带时区的ISO8601字符串,并转换为UTC时间后计算日期。

2. 基于原记录时区(+01:00)过滤

如果需要按记录所属的+01:00时区日期过滤,需在日期函数中添加时区偏移调整(因为SQLite默认转UTC会减1小时,需加回1小时以匹配原时区日期):

-- 使用strftime
SELECT * FROM history WHERE strftime('%Y-%m-%d', date, '+1 hours') = '2023-01-29';

-- 简化写法
SELECT * FROM history WHERE DATE(date, '+1 hours') = '2023-01-29';

扩展:按月份维度过滤

如果需要按月过滤,只需修改strftime的格式参数:

-- 过滤2023年1月的所有记录
SELECT * FROM history WHERE strftime('%Y-%m', date) = '2023-01';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:45:33