這似乎應該是非常簡單的做法,但我幾周來一直沒有找到答案。如何刪除MySQL數據庫中不再需要的字符串?
我試圖刪除不再需要的字符串。 Regex_replace聽起來很完美,但在MySQL中不可用。
在MySQL中我將如何實現改變這一點:
[報價= ABC; XXXXXX]
這樣: [報價= ABC]
的問題是: - 這可以出現文本塊中的任何位置 - xxxxxx只能是數字,但可以是6,7或8個字符長 - 不添加/刪除任何行,只需一次一行地重寫一列中的內容。
謝謝。
這似乎應該是非常簡單的做法,但我幾周來一直沒有找到答案。如何刪除MySQL數據庫中不再需要的字符串?
我試圖刪除不再需要的字符串。 Regex_replace聽起來很完美,但在MySQL中不可用。
在MySQL中我將如何實現改變這一點:
[報價= ABC; XXXXXX]
這樣: [報價= ABC]
的問題是: - 這可以出現文本塊中的任何位置 - xxxxxx只能是數字,但可以是6,7或8個字符長 - 不添加/刪除任何行,只需一次一行地重寫一列中的內容。
謝謝。
我不認爲你真的需要REGEX_Replace(儘管它會讓事情變得更容易)。
假設你給出的例子是,你有什麼是真正的反思:
你的出發點是用字符串[quote=<something>;
,這意味着你可以開始搜索[quote=
,
一旦你發現它,你需要搜索;
,然後對]
,
一旦你找到它們,你知道當從何處開始進行下一次搜索時(如果您提到的模式可能在單個斑點內出現多次),應該提取什麼內容。
我收到了嗎?
編輯
這種模式的目的是向[quote=ABC;xxxxxx]
所有實例轉換爲[quote=ABC]
下以下假設:
模式可以輸入字符串中出現任意次數,
xxxxxx
的長度不固定,
,結果字符串應該替換表中的值,
性能不是因爲無論是這將是一次性的工作(通過整個表的問題(去除;xxxxxx
所有出場後) )或者它會每次運行一個字符串(例如在插入新記錄之前)。
將要使用的一些MySQL函數:
INSTR
:搜索字符串中用於子串的第一外觀,並返回其中子串是位置(偏移)發現,
SUBSTR
:返回一個字符串的子串(幾種方式來使用它),
CONCAT
:連接兩個或更多個字符串。
這裏介紹的指導方針適用於操縱單個INPUT字符串。如果這需要用完整個表格,只需將字符串轉換爲CURSOR並循環。
步驟如下:
聲明5個INT局部變量作爲指數和總的輸入字符串的長度,說L_Start,L_UpTo,l_Total_Length,l_temp1和l_temp 2,設置l_Start的初始值= 1和l_Total_Length = LENGTH(INPUT_String),
聲明一個字符串變量,將複製「已清除」結果並將其初始化爲''
,比如說l_Output_str;還聲明臨時字符串來保存的'ABD'
的價值,說l_Quote,
開始一個無限循環(即設置在它的退出條件;見下文),
退出循環,如果l_Start> = l_Total_Length (這裏是從循環的兩個出口點之一),
查找從L_Start開始輸入字符串中'[quote='
第一位置,
如果返回值是0(即子字符串未找到) ,concat如果來自L_start位置的輸入字符串(例如,L_start)包含任何剩餘內容,則輸入l_Output_str的當前內容。 SET l_Output_str = CONCAT(l_Output_str,SUBSTR(INPUT_String,L_Start) ;
)和退出循環(第二齣口位置),
搜索輸入字符串爲;
符號從開始L_start + 7(即[quote=
的長度),並保存在l_temp_1值,
搜索輸入字符串爲]
符號從L_start + 7 + l_temp2並保存在l_temp_2的值開始,
所找到的結果添加到輸出的字符串作爲SET l_Output_str = CONCAT(l_Output_str,'[quote=',SUBSTR(INPUT_String,L_Start + 7, l_temp_2 - l_temp_1),']') ;
,
Set L_Start = L_Start + 7 + l_temp_2 + 1;
循環結束。
注:
正如我既不使代碼也不測試它,可能的是,我不正確設置的索引;您將需要執行詳細的測試以使其能夠根據需要進行工作;
以上IS我建議的方法;
如果輸入字符串很長(很多MB),則可能由於連接而導致性能下降(即可能需要幾秒鐘才能完成)。可以採取一些措施來提高性能,但是先讓我們先完成這項工作,然後再根據需要解決性能問題。
希望以上內容清晰全面。
是的,這正是我想要做的 - 我想匹配一個字符串並將其刪除。我知道比賽的開始 - 我知道結局。該字符串將會不同,但它總是6,7或8個字符 - 它始終以[quote =並且始終以下一個結尾]開頭。 – StripersOnline
所以,你在我的回答中已經有了實現它的範例。如果遇到困難,請試試看。 – FDavidov
我很抱歉沒有更清楚,我正在尋求「範式」和「實施」它的幫助:-)我非常熟練使用基本的REPLACE和UPDATE和SELECT SQL,但是我很難將基本選擇/替換/更新定義和使用字符串。我一直在尋找這個網站和其他人的一些通用的選擇/替換/更新定義一個字符串的前面和後面的內容,所以我可以使用它作爲框架來根據需要進行調整。我很感激幫助,謝謝。 – StripersOnline