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

如何使用Python从SQL查询字符串中提取指定格式的日期值

从SQL查询字符串提取指定日期的Python实现方案

针对需要提取between语法绑定的两个点分隔格式日期的需求,优先使用正则表达式做精准匹配,避免因为SQL字符串的空格、换行、关键字大小写差异导致提取失败,同时不会误抓取SQL其他位置的同格式内容。

可直接复用的精准匹配代码

import re

# 替换为你实际运行时的SQL查询字符串
sql_str = "select * from COLL_DS2 where TRANSACTION_DATE between '2021.02.28' and '2021.04.08' order by CREATION_DATE"

# 正则匹配逻辑:严格绑定between...and的语法结构,匹配两个单引号包裹的YYYY.MM.DD格式值
date_match_rule = r"between\s+'(\d{4}\.\d{2}\.\d{2})'\s+and\s+'(\d{4}\.\d{2}\.\d{2})'"
matched = re.search(date_match_rule, sql_str, re.IGNORECASE)

if matched:
    # 提取到的两个日期按顺序对应between的起始、结束值
    start_trans_date, end_trans_date = matched.groups()
    print(f"提取的交易起始日期:{start_trans_date}")
    print(f"提取的交易结束日期:{end_trans_date}")
else:
    print("未找到符合格式的between日期条件,请检查SQL字符串是否匹配预期结构")

方案优势说明

  • 不推荐使用固定字符串切割的方式实现,一旦SQL字符串出现多空格、换行、关键字大小写调整,就会出现索引越界或匹配错位的问题,稳定性较差
  • 正则中加入re.IGNORECASE参数,可兼容SQL里BETWEEN/Between等不同大小写的关键字写法
  • 用\s+替代固定空格匹配,可兼容SQL字符串里多空格、换行导致的间隔问题,不会因为格式不规整匹配失败
  • 整个正则逻辑完全绑定between和and的语法结构,不会误提取where子句其他位置、order by关联的同格式日期值,匹配准确率高

简化方案(仅适配无其他同格式日期的场景)

如果你的SQL字符串里,所有单引号包裹的YYYY.MM.DD格式内容都是需要提取的日期值,也可以用更简单的规则直接抓取:

import re
sql_str = "select * from COLL_DS2 where TRANSACTION_DATE between '2021.02.28' and '2021.04.08' order by CREATION_DATE"
all_matched_dates = re.findall(r"'(\d{4}\.\d{2}\.\d{2})'", sql_str)
# 匹配列表第0位为between起始日期,第1位为between结束日期
if len(all_matched_dates) >= 2:
    start_date, end_date = all_matched_dates[0], all_matched_dates[1]

注意:这个方案的局限性是如果SQL里的其他过滤条件、关联值存在同格式的字符串,会出现误匹配,非特殊情况优先使用前面的精准匹配方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 16:36:07