我想在MYSQL表中创建一个具有Fn Ln而不是Ln,Fn的新列。我的大部分数据都印有Fn Ln。
另一个想法是每次有输出(基于PHP)时合并一个字符串函数,但这似乎浪费资源。最后,我无法找到我的php函数的语法(循环或foreach)。
这是我从上一篇文章中获得的工作php函数:
$name = "Lastname, Firstname";
$names = explode(", ", $name);
$name = $names[1] . " " . $names[0];
答案 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)
和
另外,为什么这些字段首先存储在一个列中?如果将它们存储在正确的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