我有一个字段name
,其中包含以下行:
`name`
------
John Smith
George Washington
Ash Ketchum
Bill O'Reilly
我想重新格式化输出中的行:
`name`
------
SMITH, JOHN
WASHINGTON, GEORGE
KETCHUM, ASH
O'REILLY BILL
我知道我可以使用upper(
x.name
)
作为套管,但如何重新格式化名称?
答案 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