我试图通过传递一个压缩版本的列来搜索记录--如果我传入"Martin“,我将期望返回匹配的"M-@art* in”。这似乎是REGEX_REPLACE在MySQL 8.0+中处理得很好的事情,我看到了许多用户定义函数(UDF)的建议,它们可以在8.0之前完成相同的工作。我的主管不想依赖UDF,所以我想知道是否还有其他选择?
任何帮助都是非常感谢的。
发布于 2022-08-11 16:56:56
如果你允许一组特定的字符,你可以做例如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但是,如果要在数据上搜索,您可能希望在数据上运行它,并将压缩版本存储在单独的列中。
请注意,MySQL5.7将在14个月内不再受支持;请计划升级。
发布于 2022-08-11 16:24:35
使用类似于DBD::mysql的内容,提取列并更新它们。
或者,想想看,设置您的对UTF8的排序
https://stackoverflow.com/questions/73323997
复制相似问题