我有一个name
包含以下行的字段:
`name`
------
John Smith
George Washington
Ash Ketchum
Bill O'Reilly
我想重新格式化输出的行:
`name`
------
SMITH, JOHN
WASHINGTON, GEORGE
KETCHUM, ASH
O'REILLY BILL
我知道我可以使用upper(
x.name
)
大小写,但是如何重新格式化名称?
试试这个:
SELECT SUBSTRING_INDEX( `name` , ' ', -1 ) + ', ' + SUBSTRING_INDEX( `name` , ' ', 1 )
FROM MyTable
@Ben,很好地说明了名称中包含多个空格的名称。我怀疑这会给你在这些情况下你想要的输出,但它应该让你开始。
假设您的 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
由于多种原因,所有在表的同一列中都是一件坏事,因此应该明确防止这种情况。
试试这个
SELECT Concat(SUBSTRING_INDEX( `name` , ' ', -1 ) , ', ' , SUBSTRING_INDEX( `name` , ' ', 1 )) as name
FROM your_Table