如何翻转mysql中具有数据结构的列:'姓氏,名字'?

时间:2010-04-16 16:46:46

标签: sql mysql string

我想在MYSQL表中创建一个具有Fn Ln而不是Ln,Fn的新列。我的大部分数据都印有Fn Ln。

另一个想法是每次有输出(基于PHP)时合并一个字符串函数,但这似乎浪费资源。最后,我无法找到我的php函数的语法(循环或foreach)。

这是我从上一篇文章中获得的工作php函数:

   $name = "Lastname, Firstname";
    $names = explode(", ", $name);
    $name = $names[1] . " " . $names[0];

2 个答案:

答案 0 :(得分:3)

您可以使用mysql函数SUBSTRING_INDEX来获取指定数量或字符串的字符串的一部分。

确保将我以前缀为$的任何内容更改为您想要的名称

# Add new column
alter table $TABLE add $newField varchar(40); # or something like that

# Populate new data
update $TABLE set $newField = CONCAT(
  SUBSTRING_INDEX(SUBSTRING_INDEX($oldField,',',2),',',-1),
  ' ',
  SUBSTRING_INDEX($oldField,',',1)
);

将名称字段拆分,然后将第二部分放在您创建的新字段中。

答案 1 :(得分:2)

看看使用

SUBSTRING_INDEX(str,delim,count)

RIGHT(str,len)

LEFT(str,len)

CONCAT(str1,str2,...)

另外,为什么这些字段首先存储在一个列中?如果将它们存储在正确的Fields FirName中,并将列LastName?

分开,那会不会更容易

我更多的是SQL Server,但你可以尝试类似

的东西
SELECT  CONCAT( RIGHT(FirstNameLastName,LEN(FirstNameLastName) - SUBSTRING_INDEX(FirstNameLastName, ' ', 1)),
                ', ',
                LEFT(FirstNameLastName,SUBSTRING_INDEX(FirstNameLastName, ' ', 1) - 1)
                )
FROM    YourTable

编辑:

Sql Server看起来像(感兴趣的)

DECLARE @Table TABLE(
        FirstNameLastName VARCHAR(100)
)

INSERT INTO @Table SELECT 'Foo Bar'

SELECT  RIGHT(FirstNameLastName,LEN(FirstNameLastName) - PATINDEX('% %', FirstNameLastName)) + ', ' + LEFT(FirstNameLastName,PATINDEX('% %', FirstNameLastName) - 1)
FROM    @Table