0

我有一个这样的数据集:

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 中进行,我知道它可以在其中完成。

4

1 回答 1

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 这两个最外层的函数调用删除。

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

于 2018-03-07T18:44:31.817 回答