2

First と Last の 2 つのフィールドに基づいて、エントリをアルファベット順に並べ替えたいと考えています。

両方のフィールドのドメインはCHAR(30). どちらのフィールドもキーではありません。

例として、次の表を使用しています。

Last        First
Banner      Bruce
Wayne       Bruce
Wayne       Benjamin
Kent        Clark
Rodgers     Steve
Jordan      Hal
Stark       Tony
Howlett     Logan

次に、次の SQL ステートメントを使用します。これは、ここ(最後の例を参照) に従って、有効な SQL ステートメントであり、姓でソートし、次に名のサブソートを行う必要があります。

SELECT * FROM Heros ORDER BY Last ASC, First ASC;

私が探している結果は次のとおりです。

Last        First
Banner      Bruce
Howlett     Logan
Jordan      Hal
Kent        Clark
Rodgers     Steve
Stark       Tony
Wayne       Benjamin
Wayne       Bruce

代わりに私は得る:

Last        First
Banner      Bruce
Howlett     Logan
Jordan      Hal
Kent        Clark
Rodgers     Steve
Stark       Tony
Wayne       Bruce
Wayne       Benjamin

基本的に、最後の 2 行は姓で並べ替えられた後、名で並べ替えられません。返された行が期待どおりに並べられていない理由がわかりません。SQlCommands.net の他に、dev.mysql.com を見ました。スタック オーバーフローのいくつかのトピックで、SQL ステートメントがこの構文とほとんど同じであるという回答が提案されていました。私が欠けているものについての考えは非常に高く評価されます。

4

1 に答える 1

4

姓または名の前後にスペースがある場合は、次のように節Trim()で関数を試してください。ORDER BY

SELECT * FROM Heros 
ORDER BY TRIM(Last) ASC
       , TRIM(First) ASC;

このSQLFiddleを参照してください

于 2013-07-09T04:32:59.833 に答える