5

我有一个数组,我想按字母顺序排序,但也要按最后的数字排序。

"SELECT DISTINCT Number FROM database WHERE 1 Order By Number ASC";

以下是它目前的排序方式:

Number 1
Number 10
Number 11
Number 2
Number 3
Number 4
Number 5
Number 6
Number 7
Number 8
Number 9
The End

这就是我希望它排序的方式:

Number 1
Number 2
Number 3
Number 4
Number 5
Number 6
Number 7
Number 8
Number 9
Number 10
Number 11
The End
4

5 回答 5

7

添加另一个排序条件:

Order By LENGTH(Number), Number;

这是有效的,因为更长的数字也是更大的数字;对于相同长度的数字,您可以进行文本比较,因为'0' < '1' .... < '9'

于 2013-05-06T06:56:20.290 回答
2

Try this :-

SELECT distinct numberr FROM tablename Order By cast(substring(numberr,7) as unsigned int) ASC ;

Its working fine.

Out put :-

Number 1
Number 2
Number 3
Number 4
Number 5
Number 6
Number 7
Number 10
Number 11
于 2013-05-06T07:19:25.810 回答
0

sql 具有在排序时将字符串转换为整数的功能。

如果您使用的是 mysql,这就是您用来做您想做的事情的方法:

SELECT DISTINCT Number FROM database Order By CAST(Number AS UNSIGNED) ASC

如果您使用的是不同的数据库,则需要 google 如何将列转换为数据库的整数。

注意:其他一些解决方案可以工作......但有点hacky - 即它们看起来很酷,但将来可能无法工作。以上正是您想要的,并且是您“应该”这样做的方式;)

于 2013-05-06T07:02:22.123 回答
0
"SELECT DISTINCT Number FROM database WHERE 1 Order By substring_index(Number,'Number',1),cast(substring_index(Number,'Number ',-1) as unsigned int) ASC";
于 2013-05-06T07:31:06.277 回答
0

我来晚了,但我遇到了同样的问题。我的回答可以帮助那些面临的人。
您可以使用SUBSTRING_INDEX函数来解决此问题。就像您的号码在字符串的末尾一样。您的查询应该是。

SELECT DISTINCT Number 
FROM database 
WHERE 1 Order By 0+SUBSTRING_INDEX(Number,' ',-1) 
ASC;

这将做的是它将占用由空格分隔的文本的最后一块。并且 0+ 将强制将其转换为整数。

于 2020-11-23T14:34:56.347 回答