应由最后一列然后第一列排序的SQL语句

时间:2013-07-09 04:21:17

标签: mysql sql sql-order-by

我想根据两个字段First和Last按字母顺序对条目进行排序。

这两个字段都具有CHAR(30)的域。这两个领域都不是任何一种关键。

举个例子,我正在使用下表。

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

然后我根据here使用以下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

基本上,最后两行在按姓氏排序后不按名字排序。我不知道为什么返回的行没有像我预期的那样排序。除了SQlCommands.net,我查看了dev.mysql.com。几个Stack Overflow主题提出了答案,其中SQL语句几乎与此语法完全相同。任何关于我失踪的想法都将非常感激。

1 个答案:

答案 0 :(得分:4)

如果名字或姓氏周围有空格,请在ORDER BY子句中尝试Trim()功能,如下所示:

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

请参阅this SQLFiddle