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

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)

关键细节说明

  1. 上月月末计算:通过current_monday.replace(day=1)得到当前月第一天,再减1天即可精准获取上月最后一天,无需依赖额外库,兼容所有月份(包括2月)。
  2. 跨月判断:直接对比上周日与当前周一的月份值,简单高效,无需复杂的周数计算。
  3. 日期格式:Python的date对象转为字符串后默认是YYYY-MM-DD,符合多数SQL方言的日期格式要求,若需适配特定数据库(如Oracle),可调整为TO_DATE('{start_date}', 'YYYY-MM-DD')格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:25:36