如果不存在句点,MySQL会添加句点以命名首字母

时间:2018-03-07 16:48:39

标签: mysql regex replace names data-munging

我有这样的数据集:

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中做到,我知道它可以完成。

1 个答案:

答案 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的两个最外层函数调用删除了剩余的辅助空间。

请记住,匹配区分大小写。