Python怎樣定位并刪除Sql語句中不確定的查詢條件

1.問題場景描述:

????????在sql語句中經常會有查詢條件是:查找多個訂單簽訂日期范圍的數據,但具體的日期范圍是不確定,我們如何來查找定位

例如:查詢條件語句的部分如下圖:

目標是:

? ? ? ? 1)定位字符串:t_contract_order.sign_date

? ? ? ? 2)最終得到結果:

解決問題思路:

? ? ? ? 1)定位要找的字符串起始位置和截止位置

? ? ? ? ? ? ? ? 起始位置的定位:? ??

#--------定位字符串出現的位置
pattern = "t_contract_order.sign_date"
# 使用 re.finditer 查找所有出現的位置
positions = [match.start() for match in re.finditer(pattern, teststr)]

? ? ? ? ? ? ? ? 結束位置的查找技巧是找到第二次出現單引號的位置,使用函數

def find_char_second_occurrence(s, start, char):first_index = s.find(char, start)if first_index == -1:return -1second_index = s.find(char, first_index + 1)return second_index if second_index != -1 else first_index

? ? ? ? 2)去除相關內容,保持sql其他內容的正確性和完整性

for tmpstr in tmpstrs:print(tmpstr)tstr=' and '+tmpstrprint(tstr)teststr=teststr.replace(tstr,'')tstr = ' or ' + tmpstrteststr = teststr.replace(tstr, '')tstr = tmpstr +' and 'teststr = teststr.replace(tstr, '')tstr = tmpstr + ' or 'teststr = teststr.replace(tstr, '')tstr = tmpstrteststr = teststr.replace(tstr, '')print(f'sql={teststr}')

最后將完整代碼提供給大家:

import re
def find_char_second_occurrence(s, start, char):first_index = s.find(char, start)if first_index == -1:return -1second_index = s.find(char, first_index + 1)return second_index if second_index != -1 else first_index# sql查詢語句測試使用
teststr = "where t_contract_order.sign_date<='2019-01-01 00:00:00'" \" and a=b or t_contract_order.sign_date>='2024-01-01 00:00:00'" \" and t_contract_order.sign_date<='2024-12-31 23:59:59'" \" or c=d or t_contract_order.sign_date>='2025-02-28 23:59:59'"#--------定位字符串出現的位置
pattern = "t_contract_order.sign_date"
# 使用 re.finditer 查找所有出現的位置
positions = [match.start() for match in re.finditer(pattern, teststr)]
print(f'字符串{pattern}出現的位置{positions}')
character = "'"
tmpstrs=[]
for position in positions:second_occurrence = find_char_second_occurrence(teststr, position, character)tmpstrs.append(teststr[position:second_occurrence+1])print(position,second_occurrence,teststr[position:second_occurrence+1])
for tmpstr in tmpstrs:print(tmpstr)tstr=' and '+tmpstrprint(tstr)teststr=teststr.replace(tstr,'')tstr = ' or ' + tmpstrteststr = teststr.replace(tstr, '')tstr = tmpstr +' and 'teststr = teststr.replace(tstr, '')tstr = tmpstr + ' or 'teststr = teststr.replace(tstr, '')tstr = tmpstrteststr = teststr.replace(tstr, '')print(f'sql={teststr}')

如果對你有所幫助,請幫忙點贊+關注+分享

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15302.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15302.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15302.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【學習心得】PyTorch的知識要點復習(持續更新)

PyTorch知識要點復習&#xff0c;目的是為了鞏固PyTorch基礎、快速回顧、深化理解PyTorch框架。這篇文章會持續更新。 一、本文的一些說明 知識點梳理&#xff1a;我將PyTorch的核心概念和高級技巧進行了系統化的整理&#xff0c;從基礎的張量操作到復雜的模型構建與訓練。這樣…

【Linux】進程終止與進程等待

目錄 進程終止 errno exit和_exit 進程等待 wait和waitpid 宏&#xff1a;WIFEXITED 非阻塞等待 進程終止 下面要談的一個話題就是進程終止&#xff0c;就是說一個進程退出了&#xff0c;可能有三種情況 1.進程代碼執行完&#xff0c;結果是正確的 2.進程代碼執行完&…

【九十二】【算法分析與設計】875. 愛吃香蕉的珂珂,410. 分割數組的最大值,機器人跳躍問題,二分答案法

875. 愛吃香蕉的珂珂 - 力扣&#xff08;LeetCode&#xff09; 珂珂喜歡吃香蕉。這里有 n 堆香蕉&#xff0c;第 i 堆中有 piles[i] 根香蕉。警衛已經離開了&#xff0c;將在 h 小時后回來。 珂珂可以決定她吃香蕉的速度 k &#xff08;單位&#xff1a;根/小時&#xff09;。每…

【活動】開源與閉源大模型:探索未來趨勢的雙軌道路

&#x1f308;個人主頁: 鑫寶Code &#x1f525;熱門專欄: 閑話雜談&#xff5c; 炫酷HTML | JavaScript基礎 ?&#x1f4ab;個人格言: "如無必要&#xff0c;勿增實體" 文章目錄 開源與閉源大模型&#xff1a;探索未來趨勢的雙軌道路引言一、開源大模型&#…

翻譯《The Old New Thing》- The importance of the FORMAT_MESSAGE_IGNORE_INSERTS flag

The importance of the FORMAT_MESSAGE_IGNORE_INSERTS flag - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20071128-00/?p24353 Raymond Chen 2007年11月28日 FORMAT_MESSAGE_IGNORE_INSERTS 標志的重要性 簡要 文章討論了使用FormatMes…

評估企業的業務是否存在高風險的六個步驟

風險的幽靈使得組織別無選擇&#xff0c;只能改善各種網絡風險的總體管理。以下是一個基于信息安全論壇的IRAM2方法論的分步過程&#xff0c;網絡安全和風險從業者可以利用它來評估和管理信息風險。 第1步&#xff1a;范圍界定練習 范圍界定練習的目標是提供一個以業務為中心…

基于springboot+vue的招聘信息管理系統

開發語言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服務器&#xff1a;tomcat7數據庫&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;數據庫工具&#xff1a;Navicat11開發軟件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

K8s的常用命令以及yaml文件的創建

目錄 一、聲明式管理方法&#xff1a;YAML文件 1、yaml文件簡介 2、yaml和json的主要區別&#xff1a; 3、YAML的語法格式 4、yaml文件組成部分 ①控制器定義 5、查看api資源版本標簽 6、編寫nginx-deployment.yaml資源配置清單 6.1創建資源對象 6.2查看創建的pod資源…

使用python將一段文本寫入一個txt文件中且先格式化文件名

有一段文本內容&#xff0c;有“標題”和“內容”組成。 任務&#xff1a;要將這段文本&#xff0c;存放到一個txt文件中&#xff0c;文件名為當天的日期加上“標題”內容。因為“標題”內可能有/<>之類的&#xff0c;還需要格式化一下。 已經將上述功能都寫成了函數&a…

安卓手機APP開發__近距離無線通信(NFC)概述

安卓手機&#xff21;&#xff30;&#xff30;開發&#xff3f;&#xff3f;近距離無線通信(NFC)概述 概述 近距離無線通信 (NFC) 是一組近距離無線技術&#xff0c;距離通常不超過 4 厘米才能 發起連接。通過 NFC&#xff0c;您可以在 NFC 標簽和 Android 設備之間&#xf…

【Redis】 String類型的內部編碼與使用環境

文章目錄 &#x1f343;前言&#x1f334;內部編碼&#x1f384;典型使用場景&#x1f6a9;緩存功能&#x1f6a9;計數&#xff08;Counter&#xff09;功能&#x1f6a9;共享會話&#xff08;Session&#xff09;&#x1f6a9;驗證碼功能 ?總結 &#x1f343;前言 本篇文章重…

Unity-Sprite Atlas+UGUI系統的運行原理

每日一句&#xff1a;別聽世俗耳語&#xff0c;看自己的風景就好 目錄 SA的原理&#xff1a; SA的優點&#xff1a; SA的缺點&#xff1a; DrawCall是什么&#xff1f; 批處理是什么&#xff1f; 我們先了解一下UGUI系統的運行原理吧&#xff01; 提到圖集優化&#xff0…

cocosCreator動態生成二維碼

cocosCreator 版本&#xff1a;3.7.2 開發語言&#xff1a;typeScript 我們在游戲開發中&#xff0c;經常會生成一個專屬于玩家個人的二維碼&#xff0c;比如說推廣、充值等功能。 接到這個任務&#xff0c;在網上找了下&#xff0c;還是有很多教程的。但是這些教程大部分都是用…

Ollydbg動態分析MessageBoxA輸出hellow world

一、目的 找到main函數找到調用的MessageBoxA函數 測試源碼 #include <iostream> #include <windows.h>int main() {MessageBoxA(NULL, "Hellow World", "Title", MB_OK);return 1; }二、快捷鍵 指令快捷鍵說明RestartCtrlF2重新開始調試S…

buu[HCTF 2018]WarmUp(代碼審計)

buu[HCTF 2018]WarmUp&#xff08;代碼審計&#xff09; 題目 訪問source.php <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist ["source">"source.php","hint">"hint.php…

MySQL基礎學習: SET FOREIGN_KEY_CHECKS = 0

文章目錄 一、介紹二、使用方法三、注意事項 一、介紹 在MySQL中&#xff0c;SET FOREIGN_KEY_CHECKS 0; 是一個特殊的命令&#xff0c;用于臨時禁用外鍵約束檢查。這在你執行一些涉及多個表并且可能違反外鍵約束的批量操作時非常有用。 為什么需要禁用外鍵約束檢查&#xf…

電腦鍵盤如何練習盲打?

電腦鍵盤如何練習盲打&#xff1f;盲打很簡單&#xff0c;跟著我做&#xff0c;今天教會你。 請看【圖1】&#xff1a; 【圖1】中&#xff0c;紅色方框就是8個基準鍵位&#xff0c;打字時我們左右手的8個手指就是放在這8個基準鍵位上&#xff0c;F鍵和J鍵上各有一個小突起&…

Spring6基礎筆記

Spring6 Log4j2 1、概述 1.1、Spring是什么&#xff1f; Spring 是一款主流的 Java EE 輕量級開源框架 &#xff0c;Spring 由“Spring 之父”Rod Johnson 提出并創立&#xff0c;其目的是用于簡化 Java 企業級應用的開發難度和開發周期。Spring的用途不僅限于服務器端的開發…

mysql圖形化界面及將mysql注冊成后臺程序

安裝圖形化界面版本 右鍵新建數據庫 字符集使用utf8防止以后數據庫中存在中文字符導致亂碼 將mysql注冊成后臺程序 cmd進入命令行界面 切換路徑到cd /mysql/bin 將mysql注冊成后臺程序 mysqld.exe --install mysql1 (失敗&#xff0c;說明沒有權限) 以管理員身份打開成功…

ASP.NET防止流量攻擊的措施

請求速率限制&#xff1a; // 在 Global.asax.cs 文件中 Application_BeginRequest 方法中添加以下代碼 protected void Application_BeginRequest() {// 檢查請求頻率&#xff0c;限制每個 IP 地址的請求次數if (RequestThrottler.IsRequestLimitExceeded(Context.Request.Use…