我觉得我在这里错过了一些简单的东西但是......
如果我在 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
并且都有效。
最佳答案
我遇到了类似的情况,并使用 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;
在运行更新之前查看选择的结果,但这应该将您的查询限制为仅首字母并留下像 Billy Bob 这样的名字。
关于mysql - 用 mySQL 替换字符串的一部分 - 如何从名字字段中删除中间名首字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14837661/