0

我有一个name包含以下行的字段:

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

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

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

我知道我可以使用upper( x.name )大小写,但是如何重新格式化名称?

4

3 回答 3

1

试试这个:

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

@Ben,很好地说明了名称中包含多个空格的名称。我怀疑这会给你在这些情况下你想要的输出,但它应该让你开始。

于 2013-03-06T19:27:51.757 回答
1

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

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

然而,这里真正的问题是数据完整性。您需要为名称的每个部分设置单独的列,以确保数据库中的格式一致。理想情况下,你会想要这样做——

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

允许

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

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

于 2013-03-06T19:30:27.730 回答
1

试试这个

   SELECT Concat(SUBSTRING_INDEX( `name` , ' ', -1 ) , ', ' , SUBSTRING_INDEX( `name` , ' ', 1 )) as name
 FROM your_Table
于 2013-03-06T19:44:00.810 回答