用mySQL替换字符串的一部分 - 如何从名字字段中删除中间的首字母

时间:2013-02-12 16:54:44

标签: mysql

我觉得我在这里很容易丢失一些东西,但是......

如果我在mySQL表中有以下数据(users.fName):

--------------    
| Jason M.   |
--------------
| Eric       |
--------------
| Tim S      |
--------------
| Peggy Sue  |
--------------

我想最终:

--------------    
| Jason      |
--------------
| Eric       |
--------------
| Tim        |
--------------
| Peggy Sue  |
--------------

我想我必须消除。在Jason M.之后(我可以用UPDATE users SET fName = REPLACE(fName, ".", "");轻松完成)但是我怎样才能消除M和S但是离开Sue?

我知道SUBSTRING_INDEX可以获得该字段的一部分,我可以使用SELECT SUBSTRING_INDEX(fName, ' ', -1), LENGTH(SUBSTRING_INDEX(fName, ' ', -1)) FROM users之类的东西来获取字符串第二部分的长度,但我不知道如何将字段更新为只有第二部分的字符串的第一部分只有一个字符长。

更新

答案形式@Dan在我对他的查询进行了一次更改后,得到了我所需要的内容。更新的查询是:

SELECT `fName`, SUBSTRING_INDEX(`fName`, ' ', -1) AS MiddleInitial
    FROM `users`
    WHERE TRIM(`fName`) LIKE '%.' 
        AND length(`fName`)> 4 
        OR length(SUBSTRING_INDEX(`fName`, ' ', -1)) = 1;

最后AND成为OR,一切正常。

2 个答案:

答案 0 :(得分:3)

我有类似的情况,并使用where子句只选择字段中某处有空格的名称。此外,我检查了我期望的中间首字母确实只有一个长length(SUBSTRING_INDEX(First, ' ', -1)) = 1字符。

SELECT `First`, SUBSTRING_INDEX(`First`, ' ', -1) AS MiddleInitial
FROM YourTable
WHERE trim(`First`) LIKE '%.' AND length(`First`)> 4 AND 
length(SUBSTRING_INDEX(`First`, ' ', -1)) = 1;

在运行更新之前查看select的结果,但这应该将查询限制为只有首字母,并保留像Billy Bob这样的名字。

答案 1 :(得分:0)

您可以使用像UDF这样的用户定义函数,并使用正则表达式来执行此操作。