2

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

这两个字段的域都是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

基本上,最后两行在按姓氏排序后不按名字排序。我不确定返回的行没有按预期排序的原因是什么。除了 SQlCommands.net,我还查看了 dev.mysql.com。几个 Stack Overflow 主题提出了 SQL 语句几乎与此语法相同的答案。对我所缺少的任何想法将不胜感激。

4

1 回答 1

4

如果 First name 或 Last name 周围有空格,则尝试使用这样的子句Trim()中的函数:ORDER BY

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

看到这个 SQLFiddle

于 2013-07-09T04:32:59.833 回答