mysql排序字母和数字
我有一个数组,我想按字母顺序排序,但也是由数字结尾。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
添加其他排序条件:
Order By LENGTH(Number), Number;
这因为更长的数字也是一个更大的数字;对于相同长度的数字,可以进行文本比较,因为'0' < '1' .... < '9'
这是否会始终工作,因为我真的觉得可能有一些隐藏的捕获。 – Aquillo 2013-05-06 06:59:24
@Aquillo我已经添加了解释它为什么有效。随意找到一个案例,它给出了错误的结果:) – 2013-05-06 07:03:11
我一直在使用这种方法多年。有用! +1 – Fluitketel 2013-05-06 07:46:52
sql有函数在排序时将字符串转换为整数。
如果你正在使用MySQL,这是你用来做你想做的是什么:
SELECT DISTINCT Number FROM database Order By CAST(Number AS UNSIGNED) ASC
如果您使用的是不同的数据库,则需要Google如何投一列的整数为您的数据库。
注意:其他一些解决方案的工作......但有点哈克 - 即他们看起来很酷,但未来可能无法正常工作。上述不正是你想要什么,你是如何“应该”做的;)
'SELECT CAST('Number 11'AS UNSIGNED)'yield'0' – 2013-05-06 07:04:58
为什么你要给它传递一个字数字的字符串? 不要传递“数字11”,传递“11”或名为数字的列 – 2013-05-06 07:19:06
Try: 'SELECT CAST('11'AS UNSIGNED)''你正确得到'11' – 2013-05-06 07:20:38
试试这个: -
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
它不按字母顺序排序。 – 2013-05-06 07:22:57
只有在开始处的字符串始终为7个字符的情况下才能使用......您无法保证。 – 2013-05-06 07:24:08
是@TarynEast你是对的。 – 2013-05-06 07:26:01
"SELECT DISTINCT Number FROM database WHERE 1 Order By substring_index(Number,'Number',1),cast(substring_index(Number,'Number ',-1) as unsigned int) ASC";
有点迟到了。但你也可以使用另一种方法。从查询中获取结果,然后用php对它们进行排序。这里试试这个。
natsort($results); // results has your query results use natural sort.
$sorted_array = array_values($the_array); // then reorder the index
希望能帮助别人。 :)
看起来你的号码栏是一个字符串值。您可以尝试在订购前将其转换为整数 – 2013-05-06 06:55:39
试试我的答案。它工作正常。 – 2013-05-06 07:20:02
[自然排序在MySQL]中可能的重复(http://*.com/questions/153633/natural-sort-in-mysql) – Ejaz 2013-05-06 12:04:18