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

标签 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 并且都有效。

最佳答案

我遇到了类似的情况,并使用 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/

相关文章:

mysql - 按日期排序在 MySql 中无法按预期工作

php - 找不到 cakephp 数据库

mysql - Django将原始查询结果作为对象

mysql - 使用多处理在同一个 mysqldb 连接中查询, block ?

mysql查询插入日期列小于10时的选择限制

mysql - 非顺序(例如,UUID/GUID)数据如何降低索引性能?

python - 修复列 "date_of_birth"中的空值违反了非空约束

mysql - 子查询返回千行,导致慢

Php/MYSQl 输出数组的每个值查询的第一个和最后一个结果?

mysql - SQL - 提取列中的特定数字模式