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 Concat(SUBSTRING_INDEX( `name` , ' ', -1 ) , ', ' , SUBSTRING_INDEX( `name` , ' ', 1 )) as name
 FROM your_Table
于 2013-03-06T19:44:00.810 に答える
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 に答える