MySQL 如果不存在句点,则在名称首字母中添加句点

MySQL add period to name initials if no period exists

我有这样的数据集:

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 中使用,我知道可以在其中使用。

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
);

咳咳,这是一个务实的解决方案...另外,您可以轻松指定要将哪些字母视为缩写词。

周围 space 填充有助于在字符串的开头和结尾找到单个字母。

需要初始双 space 填充以使函数内部工作匹配两个字母之间的共享 spaces。

剩余的助手 space 被最外层的两个函数调用 TRIM 和 REPLACE 删除。

记住,匹配是case-sensitive。