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

如何在SQLite3中正确获取当前周或未来7天的数据?

解决SQLite查询当前日期至未来7天记录的问题

你的问题出在日期格式的字符串比较逻辑上:把日期格式化为dd-mm-yyyy的字符串后,SQLite会按字典序而非实际日期顺序判断大小。比如跨年时,28-12-2024的字符串值会比04-01-2025大,导致BETWEEN条件逻辑混乱,查询结果出错。

下面是两种更可靠的解决方案:

方案一:直接传递Python datetime对象(推荐)

SQLite支持直接接收Python的datetime对象,会自动转换为yyyy-mm-dd格式的字符串(符合日期比较的正确顺序),无需手动格式化:

self.con = sqlite3.connect('car dealership.db')
self.cursorObj = self.con.cursor()

now = datetime.now()
future_7_days = now + timedelta(days=7)

# 直接传入日期对象,SQLite自动处理格式
self.cursorObj.execute('''
    SELECT sellername, paymentdate, paymentvalue, car 
    FROM cars_buying_checks 
    WHERE paymentdate BETWEEN ? AND ?
''', (now.date(), future_7_days.date()))  # 用date()只保留日期部分,排除时间干扰

self.buying_checks_row_main_week_output = self.cursorObj.fetchall()

方案二:用SQLite日期函数转换格式(适配现有存储)

如果你的paymentdate字段确实存储的是dd-mm-yyyy格式字符串,可以在SQL中先转换为标准日期格式再比较:

self.con = sqlite3.connect('car dealership.db')
self.cursorObj = self.con.cursor()

# 生成标准格式的日期字符串
now = datetime.now().strftime('%Y-%m-%d')
future_7_days = (datetime.now() + timedelta(days=7)).strftime('%Y-%m-%d')

self.cursorObj.execute('''
    SELECT sellername, paymentdate, paymentvalue, car 
    FROM cars_buying_checks 
    -- 将dd-mm-yyyy格式转换为SQLite可识别的日期
    WHERE DATE(paymentdate, '%d-%m-%Y') BETWEEN ? AND ?
''', (now, future_7_days))

self.buying_checks_row_main_week_output = self.cursorObj.fetchall()

如果条件允许,建议把数据库中paymentdate字段的存储格式统一改为yyyy-mm-dd,这样后续所有日期相关的查询、排序操作都会更准确高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:01:29