我的“名字”列存储了这样改变位置
姓氏名字中间名
我想这样我的查询中显示它的名字:
名字中间名姓
- 并非所有的记录都有中间名,所以他们可能会在列1个或2个空格
我已经试过这样:
SELECT CONCAT (SUBSTRING_INDEX(`name`, ' ', 1) , ' ' , SUBSTRING_INDEX(`name`, ' ', -1)) AS nicename`
但这只是给出了姓氏。 “-1”部分不工作...
感谢您的帮助。
我的“名字”列存储了这样改变位置
姓氏名字中间名
我想这样我的查询中显示它的名字:
名字中间名姓
我已经试过这样:
SELECT CONCAT (SUBSTRING_INDEX(`name`, ' ', 1) , ' ' , SUBSTRING_INDEX(`name`, ' ', -1)) AS nicename`
但这只是给出了姓氏。 “-1”部分不工作...
感谢您的帮助。
首先,这是一个糟糕的设计,现在,因为您的中间名部分可能是空的,您可能会忍受它,只需选择名称select name from tbl1
。
否则,请考虑重新设计您的表格,以便为Lastname
,Firstname
和Middlename
分别设置不同的列,然后您不需要全部这些。你可以得到所有3列中的数据说
select concat(Firstname, Middlename, Lastname) as nicename
from tbl1;
名称列已存在,我无法更改它。 – user2298034
@ user2298034,发布名称列的一些示例数据。从名称列 – Rahul
采样数据(对不起,我不知道如何格式化): ' 布鲁斯·斯普林斯汀 鲍勃·迪伦 伍德豪斯佩勒姆格伦维尔 奥巴马巴拉克·侯赛因· ' – user2298034
找到了解决办法:
SELECT concat (TRIM(SUBSTR(`name`, LOCATE(' ', `name`))), ' ', SUBSTRING_INDEX(SUBSTRING_INDEX(`name`, ' ', 1), ' ', -1)) as nicename
您将有一些名字组成的名称问题。让我们用一个着名的'达芬奇达芬奇',也就是'Leonardo di ser Piero da Vinci'。你会以'Leonardo Vinci'结尾。这比你想象的要普遍。葡萄牙语,意大利语,一些法国名字,... – AxelH
只是为了这个故事,一个比利时人在美国注册时遇到了问题,我不记得哪个官方机构,因为她的名字是“玛丽安妮”。这个空间没有被自动化,但她不能称为“玛丽”,因为这不是她的名字。 – AxelH