我想根据两个字段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语句几乎与此语法完全相同。任何关于我失踪的想法都将非常感激。
答案 0 :(得分:4)
如果名字或姓氏周围有空格,请在ORDER BY
子句中尝试Trim()
功能,如下所示:
SELECT * FROM Heros
ORDER BY TRIM(Last) ASC
, TRIM(First) ASC;