在MYSQL中用空格分割字符串

Posted

技术标签:

【中文标题】在MYSQL中用空格分割字符串【英文标题】:split string with space in MYSQL 【发布时间】:2020-12-17 05:25:25 【问题描述】:

我有类似的数据

Name
-----------------
Ram Mohan
Ram Lal Mohan
Ram K Lal Mohan
...

我正在使用:

select SUBSTRING_INDEX(Name,' ',1) from contact

获取名字

select SUBSTRING_INDEX(Name,' ',-1) from contact

获取姓氏

我正在获取类似的数据

first name     last name
------------------------
Ram              Mohan
Ram              Mohan
Ram              Mohan

但我应该得到的数据是这样的

    first name     last name
------------------------
Ram              Mohan
Ram Lal          Mohan
Ram K Lal        Mohan

只有空格后的最后一个单词才能出现在姓氏中 rest 应该以名字命名

有人可以帮助我找到实现这一目标的方法吗?

【问题讨论】:

【参考方案1】:

假设您使用的是 mysql 8+,您可以在此处使用正则表达式替换:

SELECT
    REGEXP_REPLACE(Name, '\\s+\\S+$', '') AS first,
    SUBSTRING_INDEX(Name,' ', -1) AS last
FROM contact;

Demo

对于早期版本的 MySQL,并假设姓氏永远不会出现在名称中的任何其他位置,您可以使用 SUBSTRING_INDEXREPLACE

SELECT
    REPLACE(Name, CONCAT(' ', SUBSTRING_INDEX(Name,' ', -1)), '') AS first,
    SUBSTRING_INDEX(Name,' ', -1) AS last
FROM contact;

Demo

第二种方法基本上只是删除了您已经使用SUBSTRING_INDEX 正确找到的姓氏(加上前导空格)。剩下的应该是你想要的第一个、中间等等,组件。

【讨论】:

【参考方案2】:

由于您可以获得姓氏,因此您可以删除该数量的字符以获得名字。

select
    trim(left(Name,char_length(Name)-char_length(substring_index(Name,' ',-1)))) first_name,
    substring_index(Name,' ',-1) last_name
from contact

请注意,姓氏中可以包含空格(例如“Walter de la Mare”)。

fiddle

【讨论】:

以上是关于在MYSQL中用空格分割字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 C 编程中用空格读取行并分割单词

如何在 Java 中用逗号和换行符 (\n) 分割字符串? [复制]

在 Python 中用冒号分割字符串

php 分割字符串

NSString 处理技巧:分割字符串

在空格处分割R字符串,但当空格在单引号之间时不分割