在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_INDEX
和 REPLACE
:
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中用空格分割字符串的主要内容,如果未能解决你的问题,请参考以下文章