SQLite下存储为DD.MM.YYYY hh:mm:ss的日期如何筛选超30天的数据
解答
无需修改现有数据库,可直接通过SQL语句实现筛选
你可以通过SQLite的字符串截取函数,把现有DD.MM.YYYY hh:mm:ss格式的日期字段转换为SQLite支持的标准日期格式,再做时间差计算即可。
核心逻辑是将原日期字符串的年、月、日部分拆分后重新拼接为YYYY-MM-DD hh:mm:ss格式,再通过julianday函数计算和当前时间的差值:
-- 请将your_table替换为实际表名 SELECT * FROM your_table WHERE julianday('now') - julianday( substr(date,7,4) || '-' || substr(date,4,2) || '-' || substr(date,1,2) || substr(date,11) ) > 30;
方案选型建议
- 数据量较小、筛选操作频率低:直接使用上述SQL即可,不需要额外修改数据库结构,也不需要把全量数据拉到业务层处理,综合成本最低。
- 数据量较大、该筛选为高频操作:建议后续将日期字段改为SQLite支持的标准格式,或新增存储标准日期的生成列并建立索引,避免每次查询都做字符串切割,可大幅提升查询性能。
- 不优先考虑全量查询后在业务代码过滤:该方案需要拉取全表数据到业务侧,数据量大时IO开销、内存占用都会远高于在SQL层做字符串转换,仅当SQL运行环境受限时再考虑该方案。
内容的提问来源于stack exchange,提问作者somedude324334
相关产品推荐
相关产品推荐

