在开发中,可能我们有时候会想对数据库中的一个字段进行排序,尽管这个字段保存的是数字,但是它的类型却是varchar字符串类型,这就会导致出现一个问题。
例:
字段A保存了1,2,3,4,5,6,7,8,9,10,11这些记录,现在我要对A进行升序,则
select A from xxx order by A asc
我们预想是按顺序1,2,3,4,5,6,7,8,9,10,11输出,结果却是1,10,11,2,3,4,5,6,7,8,9,这是为什么呢?原因是因为对于字符串排序是通过一位一位地去比较的,从左到右依次比较,所以就会出现1,10,11排在2的前面。因为10和11的第一位是1,1比2小所以排在前面,又因为10和11的第二位是0和1,所以10排在11前面。
对于Mysql,我们可以通过abs(A)来将A转换成数字类型
select A from xxx order by A asc
对于Pgsql,我们可以通过A::int转换成数字类型
select A from xxx order by A::int asc
发表回复