我有这样的数据集:
Juan Corona
Jane L Doe
John Q. Public
R S Fitzgerald
我需要清理它,所以它是:
Juan Corona
Jane L. Doe
John Q. Public
R. S. Fitzgerald
但是,由于MySQL不支持正则表达式搜索和替换,我觉得我有点傻瓜。
最好是在数据库中,但作为后备,我可以在PREG_REPLACE中做到,我知道它可以完成。
答案 0 :(得分:2)
SELECT TRIM( -- remove sourrounding spaces
REPLACE( -- remove remaining double spaces
REPLACE(
REPLACE(
REPLACE(
-- ...
REPLACE(
REPLACE(
REPLACE(
REPLACE( CONCAT( ' ' , 'W A Mozart', ' '), ' ', ' '),
' A ', ' A.'),
' B ', ' B.'),
' C ', ' C.'),
-- ...
' X ', ' X.'),
' Y ', ' Y.'),
' Z ', ' Z.'),
' ', ' ') -- remove remaining double spaces
);
咳咳,这是一个务实的解决方案......此外,您可以轻松指定字母被视为缩写。
环绕空间填充有助于在字符串的开头和结尾找到单个字母。
需要初始的双空格填充,以使函数内部工作与两个字母之间的共享空间匹配。
TRIM和REPLACE的两个最外层函数调用删除了剩余的辅助空间。
请记住,匹配区分大小写。