如何使用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
相关产品推荐
相关产品推荐

