SQLite中如何用行内日期与datetime('now')筛选今日之前的记录
解决SQLite查询今日之前使用记录的问题
问题原因
你的date字段是TEXT类型,datetime('now')返回的是包含时分秒的完整时间字符串(例如2024-05-20 14:30:00),如果date字段存储的是仅日期格式(例如2024-05-20),直接做字符串比较会出现逻辑偏差——字符串逐字符对比规则下,短格式日期和带时分秒的日期无法准确匹配需求逻辑。
正确查询方式
根据「获取所有今日之前的使用记录」(即日期早于今天,不含今日)的需求,可采用以下方法:
方法1:统一转为纯日期格式比较
将date字段和当前时间都转换为仅含日期的格式后再对比:
SELECT * FROM Use WHERE date(date) < date('now');
date('now')返回当前纯日期(例如2024-05-20),不含时分秒date(date)把TEXT类型的date字段转为标准日期格式,确保对比逻辑准确
方法2:若需包含今日记录
如果需求是「今日及之前的所有记录」,只需将运算符改为<=:
SELECT * FROM Use WHERE date(date) <= date('now');
特殊格式适配
如果date字段存储的是非标准日期格式(比如MM/DD/YYYY),需要先转换为标准格式再对比:
-- 适配MM/DD/YYYY格式的date字段 SELECT * FROM Use WHERE date(strftime('%Y-%m-%d', date, '%m/%d/%Y')) < date('now');
内容的提问来源于stack exchange,提问作者LeoColman
相关产品推荐
相关产品推荐

