重新格式化表数据sql

时间:2013-03-06 19:25:33

标签: mysql sql

我有一个字段name,其中包含以下行:

`name`
------
John Smith
George Washington
Ash Ketchum
Bill O'Reilly

我想重新格式化输出中的行:

`name`
------
SMITH, JOHN
WASHINGTON, GEORGE
KETCHUM, ASH
O'REILLY BILL

我知道我可以使用upper( x.name )作为套管,但如何重新格式化名称?

3 个答案:

答案 0 :(得分:1)

试试这个:

SELECT SUBSTRING_INDEX( `name` , ' ', -1 ) + ', ' + SUBSTRING_INDEX( `name` , ' ', 1 )
FROM MyTable

@Ben,对其中包含多个空格的名称提出了一个很好的观点。我怀疑这会在这些情况下为你提供你想要的输出,但它应该让你开始。

答案 1 :(得分:1)

假设您的rdbms是mySql,则需要根据sql的不同方言来定制答案。

SELECT concat( substring(name, locate(name, ' ')), ', ',  substring(name, 0, locate(name, ' ') - 1)) FROM NAMES;

然而,真正的问题是数据完整性。您需要为名称的每个peice都有单独的列,以确保数据库中的格式化是合理的。理想情况下,您可能希望这样做 -

Select concat(last_name,  ', ', first_name) FROM NAMES;

允许

      'name' 
-------------------
John Smith
Smith, John
J Smith
Smith J
John q Smith
Jhon 'the smithmeister' Smith

由于多种原因,所有在表的同一列中都是一件坏事,因此应该明确地防止这种情况。

答案 2 :(得分:1)

试试这个

   SELECT Concat(SUBSTRING_INDEX( `name` , ' ', -1 ) , ', ' , SUBSTRING_INDEX( `name` , ' ', 1 )) as name
 FROM your_Table