我有一个数组,我想按字母顺序排序,但也可以用最后的数字排序。
"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
答案 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+将强制将其转换为整数。