簡體   English   中英

8.0 之前的 MySQL regex_replace 功能是否有任何替代方案,不需要 UDF?

[英]Are there any alternatives for MySQL's regex_replace feature pre-8.0 that doesn't require UDFs?

我正在嘗試通過傳入列的壓縮版本來搜索記錄 - 如果我傳入“Martin”,我希望會返回匹配的“M-@art*in”。 這是 REGEX_REPLACE 似乎在 MySQL 8.0+ 中處理得很好,我已經看到了很多關於用戶定義函數 (UDF) 的建議,它們可以在 8.0 之前完成相同的工作。 我的主管不想依賴 UDF,所以我想知道是否還有其他選擇?

任何幫助是極大的贊賞。

使用類似DBD::mysql的東西,提取列並更新它們。

或者,想想看,將排序規則設置為 UTF8

如果您允許使用一組特定的字符,您可以執行例如replace(replace(replace('M-@art*in','-',''),'@',''),'*','')

如果沒有,你可以有一個有點麻煩的查詢,分別查看每個字符並測試它是否應該包含在重新組合它們的 group_concat 中:

select id, group_concat(substr(bar,i,substr(bar,i,1) regexp '[a-z]') order by i separator '') clean_bar
from (select 1 i union select 2 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10) i
join foo on i <= length(bar)
group by foo.id

小提琴

但是,如果您嘗試對其進行搜索,您可能希望在數據上運行它並將壓縮后的版本存儲在單獨的列中。

注意 mysql 5.7 將在 14 個月后不再支持; 計划升級。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM