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

如何在SQLite中跨多年查询指定日期范围记录(含Peewee实现)

解决方案:SQLite跨年份日期范围查询(Peewee实现)

核心思路

要获取所有年份中符合指定月日范围的记录,关键是剥离日期的年份部分,只比较月日是否落在目标区间内。需要区分两种场景:

  • 目标区间不跨年(如2月1日-2月2日):直接判断月日在区间内
  • 目标区间跨年(如1月31日-2月2日):判断月日大于等于起始日,或者小于等于结束日

SQLite原生SQL实现

假设表名为data_table,日期列名为record_date,目标起始月日为'01-31',结束月日为'02-02',SQL语句如下:

SELECT record_date, value
FROM data_table
WHERE 
    CASE 
        WHEN '01-31' <= '02-02' THEN strftime('%m-%d', record_date) BETWEEN '01-31' AND '02-02'
        ELSE strftime('%m-%d', record_date) >= '01-31' OR strftime('%m-%d', record_date) <= '02-02'
    END
ORDER BY record_date DESC;

关键说明

  • strftime('%m-%d', record_date):提取日期的月日部分,格式为MM-DD,确保字符串比较符合日期逻辑
  • CASE语句:根据目标区间是否跨年,切换判断条件
  • ORDER BY record_date DESC:按日期倒序排列,匹配示例中的输出顺序

Peewee ORM实现

首先定义模型:

from peewee import SqliteDatabase, Model, DateTimeField, FloatField

# 初始化数据库连接
db = SqliteDatabase('your_database.db')

# 定义数据表模型
class DataTable(Model):
    record_date = DateTimeField()  # 对应SQLite的datetime类型
    value = FloatField()           # 实数列

    class Meta:
        database = db
        table_name = 'data_table'  # 对应数据库表名

然后实现查询函数:

from peewee import fn

def query_records_by_month_day(start_md, end_md):
    # 提取日期的月日部分(调用SQLite的strftime函数)
    month_day = fn.strftime('%m-%d', DataTable.record_date)
    
    # 根据区间是否跨年构建查询条件
    if start_md <= end_md:
        condition = month_day.between(start_md, end_md)
    else:
        condition = (month_day >= start_md) | (month_day <= end_md)
    
    # 执行查询并按日期倒序返回
    return DataTable.select().where(condition).order_by(DataTable.record_date.desc())

# 示例调用
if __name__ == '__main__':
    # 查询1月31日到2月2日的所有年份记录
    results = query_records_by_month_day('01-31', '02-02')
    for row in results:
        print(row.record_date.strftime('%Y-%m-%d'))

关键说明

  • fn.strftime:Peewee中调用SQLite内置函数的方式,用于提取月日
  • 条件判断:在Python层先判断起始/结束月日的大小,生成对应的查询条件,避免在SQL中写复杂逻辑
  • 排序:通过order_by(DataTable.record_date.desc())实现倒序排列,和示例输出一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:15:22