SQL仅替换单个列中的字符。 joe.bloggs到Joe Bloggs

时间:2017-02-17 09:38:19

标签: mysql sql replace

我认为id开始于此;

UPDATE wp_users
SET Name = REPLACE(Name, '.',' ')

但后来我意识到我无处可指定我想要影响的唯一一列, display_name 列,首先我需要替换'。'使用''(空格),然后我想要用A替换a,或者假设有很多重复的SQL,将每个单词的首字母大写。

我使用带有wordpress的MySQL

摘要:数据目前是:

**display_name**
joe.bloggs
sally.sue
timmy.turner

我需要得到它:

**display_name**
Joe Bloggs
Sally Sue
Timmy Turner

1 个答案:

答案 0 :(得分:1)

Mysql对这些东西真的很糟糕。我使用子串索引,左,右和一些串联来进行以下操作。它看起来有点难看,但有效。 它不适用于van.der.sar等名称

SELECT CONCAT_WS(' ',
    CONCAT(
                UCASE(LEFT(SUBSTRING_INDEX('john.doe','.',1),1)),
               RIGHT(SUBSTRING_INDEX('john.doe','.',1),length(SUBSTRING_INDEX('john.doe','.',1))-1)
        ),
       CONCAT(
                UCASE(LEFT(SUBSTRING_INDEX('john.doe','.',-1),1)),
               RIGHT(SUBSTRING_INDEX('john.doe','.',-1),length(SUBSTRING_INDEX('john.doe','.',-1))-1)
        )           
       )

因此您的更新脚本应如下所示

Update wp_users set name = CONCAT_WS(' ',
        CONCAT(
                    UCASE(LEFT(SUBSTRING_INDEX(name,'.',1),1)),
                   RIGHT(SUBSTRING_INDEX(name,'.',1),length(SUBSTRING_INDEX(name,'.',1))-1)
            ),
           CONCAT(
                    UCASE(LEFT(SUBSTRING_INDEX(name,'.',-1),1)),
                   RIGHT(SUBSTRING_INDEX(name,'.',-1),length(SUBSTRING_INDEX(name,'.',-1))-1)
            )           
           )