有解決問題的多種方式。我會給你3個,從最右邊開始。
架構解決方案
使用應用程序
你的問題是有關 - 更換正則表達式。而且這在MySQL中支持很弱(準確地說,不支持用正則表達式替換)。因此,您可以執行以下操作:選擇整個記錄,然後使用a-zA-Z0-9
掩碼將其分成應用程序,例如。
或者可能會改變表格結構?
嗯,替代方法是:可能你應該將這些數據分隔成2列嗎?如果你的意圖是使用單獨的數據部分,那麼這可能是改變你的數據庫架構的一個標誌?
使用MySQL
第二種方法是使用MySQL。要做到這一點 - 是的,你會使用REPLACE()
。例如,要擺脫所有的字母數字符號,你會做:
SELECT [...REPLACE(REPLACE(str, 'z', ''), 'y', '')...]
這是一個僞SQL,因爲發佈整個26種+ 26種+ 10種的REPLACE
情況下會被氣死(但是,使用這也瘋了)。但是這當然會解決你的問題。
使用外部REGEXP解決方案
這是第三條道路,它有兩個子情況。您可以使用UDF或存儲的例程。
使用UDF
存在提供的正則表達式替換功能的第三方庫。然後,你需要做的就是將這些庫包含到你的服務器版本中。示例:lib_mysqludf_preg但是,這需要執行其他操作才能使用這些庫。
使用存儲例程
好了,你可以使用保存的程序來創建自己的替換功能。實際上,我已經寫了這樣的庫,它叫做mysql-regexp
,它提供REGEXP_REPLACE()
函數,它允許你用正則表達式在字符串中進行替換。它沒有經過很好的測試,所以如果你決定使用它 - 那就自己承擔風險。示例應該是:
mysql> SELECT REGEXP_REPLACE('foo bar34 b103az 98feo', '[^a-z]', '');
+--------------------------------------------------------+
| REGEXP_REPLACE('foo bar34 b103az 98feo', '[^a-z]', '') |
+--------------------------------------------------------+
| foobarbazfeo |
+--------------------------------------------------------+
1 row in set (0.00 sec)
由於它完全用存儲的代碼編寫,所以不需要重新構建服務器或其他任何東西。
舉個例子會更好。但是'CASE'通常會使用第一個評估爲真的條件,所以它會變得複雜。 – VMai
你想達到什麼目的?在源集合和期望的結果行集合中創建一些樣本。試着用至少「僞」-SQL解釋。目前還不清楚 –
@VMai添加示例 –