2016-12-01 69 views
0

這似乎應該是非常簡單的做法,但我幾周來一直沒有找到答案。如何刪除MySQL數據庫中不再需要的字符串?

我試圖刪除不再需要的字符串。 Regex_replace聽起來很完美,但在MySQL中不可用。

在MySQL中我將如何實現改變這一點:

[報價= ABC; XXXXXX]

這樣: [報價= ABC]

的問題是: - 這可以出現文本塊中的任何位置 - xxxxxx只能是數字,但可以是6,7或8個字符長 - 不添加/刪除任何行,只需一次一行地重寫一列中的內容。

謝謝。

回答

0

我不認爲你真的需要REGEX_Replace(儘管它會讓事情變得更容易)。

假設你給出的例子是,你有什麼是真正的反思:

  1. 你的出發點是用字符串[quote=<something>;,這意味着你可以開始搜索[quote=

  2. 一旦你發現它,你需要搜索;,然後對]

  3. 一旦你找到它們,你知道當從何處開始進行下一次搜索時(如果您提到的模式可能在單個斑點內出現多次),應該提取什麼內容。

我收到了嗎?

編輯

這種模式的目的是向[quote=ABC;xxxxxx]所有實例轉換爲[quote=ABC]下以下假設:

  1. 模式可以輸入字符串中出現任意次數,

  2. xxxxxx的長度不固定,

  3. ,結果字符串應該替換表中的值,

  4. 性能不是因爲無論是這將是一次性的工作(通過整個表的問題(去除;xxxxxx所有出場後) )或者它會每次運行一個字符串(例如在插入新記錄之前)。

將要使用的一些MySQL函數:

  1. INSTR:搜索字符串中用於子串的第一外觀,並返回其中子串是位置(偏移)發現,

  2. SUBSTR:返回一個字符串的子串(幾種方式來使用它),

  3. CONCAT:連接兩個或更多個字符串。

這裏介紹的指導方針適用於操縱單個INPUT字符串。如果這需要用完整個表格,只需將字符串轉換爲CURSOR並循環。

步驟如下:

  1. 聲明5個INT局部變量作爲指數和總的輸入字符串的長度,說L_Start,L_UpTo,l_Total_Length,l_temp1和l_temp 2,設置l_Start的初始值= 1和l_Total_Length = LENGTH(INPUT_String),

  2. 聲明一個字符串變量,將複製「已清除」結果並將其初始化爲'',比如說l_Output_str;還聲明臨時字符串來保存的'ABD'的價值,說l_Quote,

  3. 開始一個無限循環(即設置在它的退出條件;見下文),

  4. 退出循環,如果l_Start> = l_Total_Length (這裏是從循環的兩個出口點之一),

  5. 查找從L_Start開始輸入字符串中'[quote='第一位置,

  6. 如果返回值是0(即子字符串未找到) ,concat如果來自L_start位置的輸入字符串(例如,L_start)包含任何剩餘內容,則輸入l_Output_str的當前內容。 SET l_Output_str = CONCAT(l_Output_str,SUBSTR(INPUT_String,L_Start) ;)和退出循環(第二齣口位置),

  7. 搜索輸入字符串爲;符號從開始L_start + 7(即[quote=的長度),並保存在l_temp_1值,

  8. 搜索輸入字符串爲]符號從L_start + 7 + l_temp2並保存在l_temp_2的值開始,

  9. 所找到的結果添加到輸出的字符串作爲SET l_Output_str = CONCAT(l_Output_str,'[quote=',SUBSTR(INPUT_String,L_Start + 7, l_temp_2 - l_temp_1),']') ;

  10. Set L_Start = L_Start + 7 + l_temp_2 + 1;

  11. 循環結束。

注:

  1. 正如我既不使代碼也不測試它,可能的是,我不正確設置的索引;您將需要執行詳細的測試以使其能夠根據需要進行工作;

  2. 以上IS我建議的方法;

  3. 如果輸入字符串很長(很多MB),則可能由於連接而導致性能下降(即可能需要幾秒鐘才能完成)。可以採取一些措施來提高性能,但是先讓我們先完成這項工作,然後再根據需要解決性能問題。

希望以上內容清晰全面。

+0

是的,這正是我想要做的 - 我想匹配一個字符串並將其刪除。我知道比賽的開始 - 我知道結局。該字符串將會不同,但它總是6,7或8個字符 - 它始終以[quote =並且始終以下一個結尾]開頭。 – StripersOnline

+0

所以,你在我的回答中已經有了實現它的範例。如果遇到困難,請試試看。 – FDavidov

+0

我很抱歉沒有更清楚,我正在尋求「範式」和「實施」它的幫助:-)我非常熟練使用基本的REPLACE和UPDATE和SELECT SQL,但是我很難將基本選擇/替換/更新定義和使用字符串。我一直在尋找這個網站和其他人的一些通用的選擇/替換/更新定義一個字符串的前面和後面的內容,所以我可以使用它作爲框架來根據需要進行調整。我很感激幫助,謝謝。 – StripersOnline

相關問題