2016-12-16 145 views
0

我的“名字”列存储了这样改变位置

姓氏名字中间名

我想这样我的查询中显示它的名字:

名字中间名姓

  • 并非所有的记录都有中间名,所以他们可能会在列1个或2个空格

我已经试过这样:

SELECT CONCAT (SUBSTRING_INDEX(`name`, ' ', 1) , ' ' , SUBSTRING_INDEX(`name`, ' ', -1)) AS nicename` 

但这只是给出了姓氏。 “-1”部分不工作...

感谢您的帮助。

+0

您将有一些名字组成的名称问题。让我们用一个着名的'达芬奇达芬奇',也就是'Leonardo di ser Piero da Vinci'。你会以'Leonardo Vinci'结尾。这比你想象的要普遍。葡萄牙语,意大利语,一些法国名字,... – AxelH

+0

只是为了这个故事,一个比利时人在美国注册时遇到了问题,我不记得哪个官方机构,因为她的名字是“玛丽安妮”。这个空间没有被自动化,但她不能称为“玛丽”,因为这不是她的名字。 – AxelH

回答

0

首先,这是一个糟糕的设计,现在,因为您的中间名部分可能是空的,您可能会忍受它,只需选择名称select name from tbl1

否则,请考虑重新设计您的表格,以便为Lastname,FirstnameMiddlename分别设置不同的列,然后您不需要全部这些。你可以得到所有3列中的数据说

select concat(Firstname, Middlename, Lastname) as nicename 
from tbl1; 
+0

名称列已存在,我无法更改它。 – user2298034

+0

@ user2298034,发布名称列的一些示例数据。从名称列 – Rahul

+0

采样数据(对不起,我不知道如何格式化): ' 布鲁斯·斯普林斯汀 鲍勃·迪伦 伍德豪斯佩勒姆格伦维尔 奥巴马巴拉克·侯赛因· ' – user2298034