mysql排序按字母顺序和数字

时间:2013-05-06 06:54:11

标签: mysql

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

"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

6 个答案:

答案 0 :(得分:7)

添加另一种排序条件:

Order By LENGTH(Number), Number;

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

答案 1 :(得分:2)

试试这个: -

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

工作正常。

输出: -

Number 1
Number 2
Number 3
Number 4
Number 5
Number 6
Number 7
Number 10
Number 11

答案 2 :(得分:0)

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

如果你使用的是mysql,那就是你用来做你想做的事情:

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

如果您使用的是其他数据库,则需要谷歌如何将列转换为数据库的整数。

注意:其他一些解决方案有效......但是它们看起来很酷 - 即它们看起来很酷,但未来可能无法正常工作。以上内容完全符合您的要求,是您“应该”做到的;)

答案 3 :(得分: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";

答案 4 :(得分:0)

派对有点晚了。但您也可以使用其他方法。从查询中获取结果,然后使用php对它们进行排序。试试吧。

natsort($results); // results has your query results use natural sort.
$sorted_array = array_values($the_array); // then reorder the index

希望它有助于某人。 :)

答案 5 :(得分:0)

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

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

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