求助:SQLite查询30天前数据筛选未缴费会员未获预期结果
解决SQLite查询30天前/上月未缴费会员的问题
嘿,我一眼就看出问题所在啦——你用的DATEADD()和getdate()是SQL Server的专属函数,但SQLite有自己的日期处理规则,而且你把函数包在单引号里,导致SQL把它当成了普通字符串,根本没执行计算!
核心问题拆解
- SQLite不支持
DATEADD()和getdate(),替代的是用DATE('now', 偏移量)来计算日期,CURRENT_DATE或DATE('now')可以获取当前日期。 - 你把
DATEADD(Day,-30,getdate())放在单引号里,这会让SQLite把它当作一个字符串值去匹配DateOfAd字段,自然找不到对应数据。
正确的查询语句
场景1:查询30天前及更早的会员数据
如果你的DateOfAd字段是DATE类型或者存储为YYYY-MM-DD格式的文本,用这个语句:
SELECT * FROM MemberInformation WHERE DateOfAd <= DATE('now', '-30 days');
DATE('now', '-30 days')会自动计算当前日期往前推30天的日期,<=确保你能拿到所有30天前(含当天)的记录。
场景2:更精准的“上月”数据查询
如果你的需求是严格找上个月的未缴费会员(比固定30天更准确,因为不同月份天数不同),可以用这个语句:
SELECT * FROM MemberInformation WHERE DateOfAd BETWEEN DATE('now', 'start of month', '-1 month') AND DATE('now', 'start of month', '-1 day');
DATE('now', 'start of month', '-1 month'):获取上个月的第一天DATE('now', 'start of month', '-1 day'):获取上个月的最后一天
额外提醒
确保你的DateOfAd字段存储的是标准日期格式(比如YYYY-MM-DD),SQLite的日期函数对这种格式支持最好。如果字段是时间戳(整数类型),可以用strftime('%s', DATE('now', '-30 days'))把日期转换成时间戳再对比。
内容的提问来源于stack exchange,提问作者yns Ahmed
相关产品推荐
相关产品推荐

