我有一个NAME
列,数据存储在MySql数据库中:
Doe,John P
我想将其分解为FNAME
LNAME
MNAME
和FULLNAME
。
如果我不想篡改SQL表,我应该创建一个视图吗?
我知道如何使用函数在PHP中修复它,但我宁愿在数据库服务器上完成处理而不是应用程序服务器。
这是我到目前为止所拥有的。我认为我需要复合查询或类似的东西。
SELECT Name
, SUBSTRING_INDEX(Name,',',-1) As FNAME
, SUBSTRING_INDEX(Name,',',1) As LNAME
, SUBSTRING_INDEX(Name,' ',1) As MNAME
FROM people;
我无法抓住中间名并执行我认为应该CONCAT
的功能来获取FULLNAME
。
如果有一种方法(可能是有条件的)来处理数据库中没有中间名的名称,那将会很棒。 (即DOE,JOHN)。
答案 0 :(得分:0)
视图是获取未来查询所需结果的好方法。定义查询将是:
SELECT Name, SUBSTRING_INDEX(SUBSTRING_INDEX(Name, ',', -1), ' ', 1) As FNAME,
SUBSTRING_INDEX(Name, ',', 1) As LNAME,
SUBSTRING_INDEX(Name, ' ', -1) As MNAME
FROM people;
这将假设格式完全正确,因为您在表中描述它。小的更改 - 例如没有中间名或逗号后的空格 - 会使语法更复杂。