Python中SQL动态日期生成:跨月周的日期范围限制与周数日期列表获取
解决Python动态生成跨月日期范围SQL的方案
核心思路
每周一执行脚本时,先判断当前周一所在的周是否跨两个月(即上周日属于上个月):
- 若跨月,将查询结束日期设为上月月末
- 若不跨月,结束日期设为上周日
查询起始日期统一为上周周一(当前周一往前推7天)
代码实现
import datetime # 获取当前执行日(每周一) current_monday = datetime.date.today() # 可选:验证当天是否为周一,避免脚本误执行 if current_monday.weekday() != 0: raise ValueError("脚本仅允许周一执行") # 计算上周日的日期 last_sunday = current_monday - datetime.timedelta(days=1) # 判断是否跨月:上周日与当前周一分属不同月份 is_cross_month = last_sunday.month != current_monday.month # 确定查询结束日期 if is_cross_month: # 计算上月月末:当前月第一天减1天 last_day_of_last_month = current_monday.replace(day=1) - datetime.timedelta(days=1) end_date = last_day_of_last_month else: end_date = last_sunday # 确定查询起始日期:上周周一 start_date = current_monday - datetime.timedelta(days=7) # 生成SQL查询语句(根据实际表名、字段名调整) sql_query = f""" SELECT * FROM your_target_table WHERE date_column BETWEEN '{start_date}' AND '{end_date}' """ print(sql_query)
关键细节说明
- 上月月末计算:通过
current_monday.replace(day=1)得到当前月第一天,再减1天即可精准获取上月最后一天,无需依赖额外库,兼容所有月份(包括2月)。 - 跨月判断:直接对比上周日与当前周一的月份值,简单高效,无需复杂的周数计算。
- 日期格式:Python的
date对象转为字符串后默认是YYYY-MM-DD,符合多数SQL方言的日期格式要求,若需适配特定数据库(如Oracle),可调整为TO_DATE('{start_date}', 'YYYY-MM-DD')格式。
内容的提问来源于stack exchange,提问作者Spiderman
相关产品推荐
相关产品推荐

